From 4a2b9532435e7f68085fa7aafdecaa07814796c1 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Fri, 29 Jul 2022 15:09:05 +0100 Subject: [PATCH] Add BroadcastListener callback --- .../Callbacks/BroadcastListener.swift | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/Callbacks/BroadcastListener.swift diff --git a/Sources/ElixxirDAppsSDK/Callbacks/BroadcastListener.swift b/Sources/ElixxirDAppsSDK/Callbacks/BroadcastListener.swift new file mode 100644 index 00000000..2b610491 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Callbacks/BroadcastListener.swift @@ -0,0 +1,44 @@ +import Bindings +import XCTestDynamicOverlay + +public struct BroadcastListener { + public init(handle: @escaping (Result<BroadcastMessage, NSError>) -> Void) { + self.handle = handle + } + + public var handle: (Result<BroadcastMessage, NSError>) -> Void +} + +extension BroadcastListener { + public static let unimplemented = BroadcastListener( + handle: XCTUnimplemented("\(Self.self)") + ) +} + +extension BroadcastListener { + func makeBindingsBroadcastListener() -> BindingsBroadcastListenerProtocol { + class CallbackObject: NSObject, BindingsBroadcastListenerProtocol { + init(_ callback: BroadcastListener) { + self.callback = callback + } + + let callback: BroadcastListener + + func callback(_ p0: Data?, p1: Error?) { + if let error = p1 { + callback.handle(.failure(error as NSError)) + } else if let data = p0 { + do { + callback.handle(.success(try BroadcastMessage.decode(data))) + } catch { + callback.handle(.failure(error as NSError)) + } + } else { + fatalError("BindingsBroadcastListener received `nil` data and `nil` error") + } + } + } + + return CallbackObject(self) + } +} -- GitLab