From a0cd99104d005690900fa1dfe0d97200c9c7cdfa Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Wed, 31 Aug 2022 01:34:52 +0100
Subject: [PATCH] Add TrackServicesCallback

---
 .../Callbacks/TrackServicesCallback.swift     | 42 +++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 Sources/XXClient/Callbacks/TrackServicesCallback.swift

diff --git a/Sources/XXClient/Callbacks/TrackServicesCallback.swift b/Sources/XXClient/Callbacks/TrackServicesCallback.swift
new file mode 100644
index 00000000..df3043bb
--- /dev/null
+++ b/Sources/XXClient/Callbacks/TrackServicesCallback.swift
@@ -0,0 +1,42 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct TrackServicesCallback {
+  public init(handle: @escaping (Result<Data, Error>) -> Void) {
+    self.handle = handle
+  }
+
+  public var handle: (Result<Data, Error>) -> Void
+}
+
+extension TrackServicesCallback {
+  public static let unimplemented = HealthCallback(
+    handle: XCTUnimplemented("\(Self.self)")
+  )
+}
+
+extension TrackServicesCallback {
+  func makeBindingsHealthCallback() -> BindingsTrackServicesCallbackProtocol {
+    class CallbackObject: NSObject, BindingsTrackServicesCallbackProtocol {
+      init(_ callback: TrackServicesCallback) {
+        self.callback = callback
+      }
+
+      let callback: TrackServicesCallback
+
+      func callback(_ marshalData: Data?, err: Error?) {
+        if let err = err {
+          callback.handle(.failure(err))
+          return
+        }
+        if let marshalData = marshalData {
+          callback.handle(.success(marshalData))
+          return
+        }
+        fatalError("BindingsTrackServicesCallback received nil marshalData and err")
+      }
+    }
+
+    return CallbackObject(self)
+  }
+}
-- 
GitLab