From 79ff55f2ed554e87b114ed14c9202ee272135a88 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 25 Jul 2022 16:18:33 +0100
Subject: [PATCH] Add E2EAddService functor

---
 Sources/ElixxirDAppsSDK/E2E.swift           |  7 +++--
 Sources/ElixxirDAppsSDK/E2EAddService.swift | 29 +++++++++++++++++++++
 2 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 Sources/ElixxirDAppsSDK/E2EAddService.swift

diff --git a/Sources/ElixxirDAppsSDK/E2E.swift b/Sources/ElixxirDAppsSDK/E2E.swift
index 38f9d801..872b1889 100644
--- a/Sources/ElixxirDAppsSDK/E2E.swift
+++ b/Sources/ElixxirDAppsSDK/E2E.swift
@@ -7,6 +7,7 @@ public struct E2E {
   public var payloadSize: E2EPayloadSize
   public var partitionSize: E2EPartitionSize
   public var addPartnerCallback: E2EAddPartnerCallback
+  public var addService: E2EAddService
 
   // TODO:
 }
@@ -19,7 +20,8 @@ extension E2E {
       getContact: .live(bindingsE2E: bindingsE2E),
       payloadSize: .live(bindingsE2E: bindingsE2E),
       partitionSize: .live(bindingsE2E: bindingsE2E),
-      addPartnerCallback: .live(bindingsE2E)
+      addPartnerCallback: .live(bindingsE2E),
+      addService: .live(bindingsE2E)
     )
   }
 }
@@ -31,6 +33,7 @@ extension E2E {
     getContact: .unimplemented,
     payloadSize: .unimplemented,
     partitionSize: .unimplemented,
-    addPartnerCallback: .unimplemented
+    addPartnerCallback: .unimplemented,
+    addService: .unimplemented
   )
 }
diff --git a/Sources/ElixxirDAppsSDK/E2EAddService.swift b/Sources/ElixxirDAppsSDK/E2EAddService.swift
new file mode 100644
index 00000000..f4b57217
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/E2EAddService.swift
@@ -0,0 +1,29 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct E2EAddService {
+  public var run: (ServiceProcessor) throws -> Void
+
+  public func callAsFunction(
+    processor: ServiceProcessor
+  ) throws {
+    try run(processor)
+  }
+}
+
+extension E2EAddService {
+  public static func live(_ bindingsE2E: BindingsE2e) -> E2EAddService {
+    E2EAddService { processor in
+      try bindingsE2E.addService(
+        processor.serviceTag,
+        processor: processor.makeBindingsProcessor()
+      )
+    }
+  }
+}
+
+extension E2EAddService {
+  public static let unimplemented = E2EAddService(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
-- 
GitLab