From 432a7c86bda869ea056aca8a49dd9416280705d3 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Thu, 28 Jul 2022 20:02:21 +0100 Subject: [PATCH] Add ReceiveFileCallback --- .../Callbacks/ReceiveFileCallback.swift | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/Callbacks/ReceiveFileCallback.swift diff --git a/Sources/ElixxirDAppsSDK/Callbacks/ReceiveFileCallback.swift b/Sources/ElixxirDAppsSDK/Callbacks/ReceiveFileCallback.swift new file mode 100644 index 00000000..4bfe288b --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Callbacks/ReceiveFileCallback.swift @@ -0,0 +1,40 @@ +import Bindings +import XCTestDynamicOverlay + +public struct ReceiveFileCallback { + public var handle: (Result<ReceivedFile, NSError>) -> Void +} + +extension ReceiveFileCallback { + public static let unimplemented = ReceiveFileCallback( + handle: XCTUnimplemented("\(Self.self)") + ) +} + +extension ReceiveFileCallback { + func makeBindingsReceiveFileCallback() -> BindingsReceiveFileCallbackProtocol { + class CallbackObject: NSObject, BindingsReceiveFileCallbackProtocol { + init(_ callback: ReceiveFileCallback) { + self.callback = callback + } + + let callback: ReceiveFileCallback + + func callback(_ payload: Data?, err: Error?) { + if let error = err { + callback.handle(.failure(error as NSError)) + } else if let data = payload { + do { + callback.handle(.success(try ReceivedFile.decode(data))) + } catch { + callback.handle(.failure(error as NSError)) + } + } else { + fatalError("BindingsReceiveFileCallback received `nil` payload and `nil` error") + } + } + } + + return CallbackObject(self) + } +} -- GitLab