From 5be84eb4c0e1003415808a3b6bc7c8c9df99651b Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 25 Jul 2022 16:03:22 +0100
Subject: [PATCH] Add E2EAddPartnerCallback functor

---
 Sources/ElixxirDAppsSDK/E2E.swift             |  7 +++-
 .../E2EAddPartnerCallback.swift               | 37 +++++++++++++++++++
 2 files changed, 42 insertions(+), 2 deletions(-)
 create mode 100644 Sources/ElixxirDAppsSDK/E2EAddPartnerCallback.swift

diff --git a/Sources/ElixxirDAppsSDK/E2E.swift b/Sources/ElixxirDAppsSDK/E2E.swift
index a3ee3414..38f9d801 100644
--- a/Sources/ElixxirDAppsSDK/E2E.swift
+++ b/Sources/ElixxirDAppsSDK/E2E.swift
@@ -6,6 +6,7 @@ public struct E2E {
   public var getContact: E2EGetContact
   public var payloadSize: E2EPayloadSize
   public var partitionSize: E2EPartitionSize
+  public var addPartnerCallback: E2EAddPartnerCallback
 
   // TODO:
 }
@@ -17,7 +18,8 @@ extension E2E {
       getReceptionId: .live(bindingsE2E: bindingsE2E),
       getContact: .live(bindingsE2E: bindingsE2E),
       payloadSize: .live(bindingsE2E: bindingsE2E),
-      partitionSize: .live(bindingsE2E: bindingsE2E)
+      partitionSize: .live(bindingsE2E: bindingsE2E),
+      addPartnerCallback: .live(bindingsE2E)
     )
   }
 }
@@ -28,6 +30,7 @@ extension E2E {
     getReceptionId: .unimplemented,
     getContact: .unimplemented,
     payloadSize: .unimplemented,
-    partitionSize: .unimplemented
+    partitionSize: .unimplemented,
+    addPartnerCallback: .unimplemented
   )
 }
diff --git a/Sources/ElixxirDAppsSDK/E2EAddPartnerCallback.swift b/Sources/ElixxirDAppsSDK/E2EAddPartnerCallback.swift
new file mode 100644
index 00000000..06713845
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/E2EAddPartnerCallback.swift
@@ -0,0 +1,37 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct E2EAddPartnerCallback {
+  public var run: (Data, AuthCallbacks) throws -> Cancellable
+
+  public func callAsFunction(
+    partnerId: Data,
+    callbacks: AuthCallbacks
+  ) throws -> Cancellable {
+    try run(partnerId, callbacks)
+  }
+}
+
+extension E2EAddPartnerCallback {
+  public static func live(_ bindingsE2E: BindingsE2e) -> E2EAddPartnerCallback {
+    E2EAddPartnerCallback { partnerId, callbacks in
+      try bindingsE2E.addPartnerCallback(
+        partnerId,
+        cb: callbacks.makeBindingsAuthCallbacks()
+      )
+      return Cancellable {
+        do {
+          try bindingsE2E.deletePartnerCallback(partnerId)
+        } catch {
+          fatalError("BindingsE2e.deletePartnerCallback returned error: \(error)")
+        }
+      }
+    }
+  }
+}
+
+extension E2EAddPartnerCallback {
+  public static let unimplemented = E2EAddPartnerCallback(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
-- 
GitLab