diff --git a/Examples/xx-messenger/Sources/AppCore/ReceiveFileHandler/ReceiveFileHandler.swift b/Examples/xx-messenger/Sources/AppCore/ReceiveFileHandler/ReceiveFileHandler.swift
new file mode 100644
index 0000000000000000000000000000000000000000..92c266dadb51ca47b6e797f555f731366dcd3c75
--- /dev/null
+++ b/Examples/xx-messenger/Sources/AppCore/ReceiveFileHandler/ReceiveFileHandler.swift
@@ -0,0 +1,38 @@
+import XCTestDynamicOverlay
+import XXClient
+import XXMessengerClient
+
+public struct ReceiveFileHandler {
+  public typealias OnError = (Error) -> Void
+
+  public var run: (@escaping OnError) -> Cancellable
+
+  public func callAsFunction(onError: @escaping OnError) -> Cancellable {
+    run(onError)
+  }
+}
+
+extension ReceiveFileHandler {
+  public static func live(
+    messenger: Messenger
+  ) -> ReceiveFileHandler {
+    ReceiveFileHandler { onError in
+      messenger.registerReceiveFileCallback(.init { result in
+        switch result {
+        case .success(let file):
+          // TODO:
+          break
+
+        case .failure(let error):
+          onError(error)
+        }
+      })
+    }
+  }
+}
+
+extension ReceiveFileHandler {
+  public static let unimplemented = ReceiveFileHandler(
+    run: XCTUnimplemented("\(Self.self)", placeholder: Cancellable {})
+  )
+}