From be376032b45fa3220b4fad440d308e0229e2d3bc Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 1 Aug 2022 12:12:13 +0100 Subject: [PATCH] Add UdSearchCallback callback --- .../Callbacks/UdSearchCallback.swift | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/Callbacks/UdSearchCallback.swift diff --git a/Sources/ElixxirDAppsSDK/Callbacks/UdSearchCallback.swift b/Sources/ElixxirDAppsSDK/Callbacks/UdSearchCallback.swift new file mode 100644 index 00000000..d836dcb3 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Callbacks/UdSearchCallback.swift @@ -0,0 +1,44 @@ +import Bindings +import XCTestDynamicOverlay + +public struct UdSearchCallback { + public init(handle: @escaping (Result<[Data], NSError>) -> Void) { + self.handle = handle + } + + public var handle: (Result<[Data], NSError>) -> Void +} + +extension UdSearchCallback { + public static let unimplemented = UdSearchCallback( + handle: XCTUnimplemented("\(Self.self)") + ) +} + +extension UdSearchCallback { + func makeBindingsUdSearchCallback() -> BindingsUdSearchCallbackProtocol { + class CallbackObject: NSObject, BindingsUdSearchCallbackProtocol { + init(_ callback: UdSearchCallback) { + self.callback = callback + } + + let callback: UdSearchCallback + + func callback(_ contactListJSON: Data?, err: Error?) { + if let error = err { + callback.handle(.failure(error as NSError)) + } else if let data = contactListJSON { + do { + callback.handle(.success(try JSONDecoder().decode([Data].self, from: data))) + } catch { + callback.handle(.failure(error as NSError)) + } + } else { + fatalError("BindingsUdSearchCallback received `nil` data and `nil` error") + } + } + } + + return CallbackObject(self) + } +} -- GitLab