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