From 9bddbf380405287aaedeb38001d471478f6e8abd Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Wed, 3 Aug 2022 21:24:15 +0100
Subject: [PATCH] Add E2ERegisterListener functor

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

diff --git a/Sources/ElixxirDAppsSDK/E2E/E2E.swift b/Sources/ElixxirDAppsSDK/E2E/E2E.swift
index e127fdac..710de98e 100644
--- a/Sources/ElixxirDAppsSDK/E2E/E2E.swift
+++ b/Sources/ElixxirDAppsSDK/E2E/E2E.swift
@@ -22,6 +22,7 @@ public struct E2E {
   public var confirmReceivedRequest: E2EConfirmReceivedRequest
   public var replayConfirmReceivedRequest: E2EReplayConfirmReceivedRequest
   public var send: E2ESend
+  public var registerListener: E2ERegisterListener
 }
 
 extension E2E {
@@ -47,7 +48,8 @@ extension E2E {
       verifyOwnership: .live(bindingsE2E),
       confirmReceivedRequest: .live(bindingsE2E),
       replayConfirmReceivedRequest: .live(bindingsE2E),
-      send: .live(bindingsE2E)
+      send: .live(bindingsE2E),
+      registerListener: .live(bindingsE2E)
     )
   }
 }
@@ -74,6 +76,7 @@ extension E2E {
     verifyOwnership: .unimplemented,
     confirmReceivedRequest: .unimplemented,
     replayConfirmReceivedRequest: .unimplemented,
-    send: .unimplemented
+    send: .unimplemented,
+    registerListener: .unimplemented
   )
 }
diff --git a/Sources/ElixxirDAppsSDK/E2E/Functors/E2ERegisterListener.swift b/Sources/ElixxirDAppsSDK/E2E/Functors/E2ERegisterListener.swift
new file mode 100644
index 00000000..5163c559
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/E2E/Functors/E2ERegisterListener.swift
@@ -0,0 +1,32 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct E2ERegisterListener {
+  public var run: (Data, Int, Listener) throws -> Void
+
+  public func callAsFunction(
+    senderId: Data,
+    messageType: Int,
+    callback: Listener
+  ) throws {
+    try run(senderId, messageType, callback)
+  }
+}
+
+extension E2ERegisterListener {
+  public static func live(_ bindingsE2E: BindingsE2e) -> E2ERegisterListener {
+    E2ERegisterListener { senderId, messageType, callback in
+      try bindingsE2E.registerListener(
+        senderId,
+        messageType: messageType,
+        newListener: callback.makeBindingsListener()
+      )
+    }
+  }
+}
+
+extension E2ERegisterListener {
+  public static let unimplemented = E2ERegisterListener(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
-- 
GitLab