From 265dd4037ed0498afaad40d8a0f31e7c911f3ec7 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Fri, 29 Jul 2022 15:10:52 +0100
Subject: [PATCH] Wrap Channel object

---
 Sources/ElixxirDAppsSDK/Channel/Channel.swift | 37 +++++++++++++++++++
 .../Channel/Functors/ChannelBroadcast.swift   | 22 +++++++++++
 .../Functors/ChannelBroadcastAsymmetric.swift | 25 +++++++++++++
 .../Channel/Functors/ChannelGet.swift         | 24 ++++++++++++
 .../Channel/Functors/ChannelListen.swift      | 30 +++++++++++++++
 .../ChannelMaxAsymmetricPayloadSize.swift     | 22 +++++++++++
 .../Functors/ChannelMaxPayloadSize.swift      | 22 +++++++++++
 .../Channel/Functors/ChannelStop.swift        | 22 +++++++++++
 8 files changed, 204 insertions(+)
 create mode 100644 Sources/ElixxirDAppsSDK/Channel/Channel.swift
 create mode 100644 Sources/ElixxirDAppsSDK/Channel/Functors/ChannelBroadcast.swift
 create mode 100644 Sources/ElixxirDAppsSDK/Channel/Functors/ChannelBroadcastAsymmetric.swift
 create mode 100644 Sources/ElixxirDAppsSDK/Channel/Functors/ChannelGet.swift
 create mode 100644 Sources/ElixxirDAppsSDK/Channel/Functors/ChannelListen.swift
 create mode 100644 Sources/ElixxirDAppsSDK/Channel/Functors/ChannelMaxAsymmetricPayloadSize.swift
 create mode 100644 Sources/ElixxirDAppsSDK/Channel/Functors/ChannelMaxPayloadSize.swift
 create mode 100644 Sources/ElixxirDAppsSDK/Channel/Functors/ChannelStop.swift

diff --git a/Sources/ElixxirDAppsSDK/Channel/Channel.swift b/Sources/ElixxirDAppsSDK/Channel/Channel.swift
new file mode 100644
index 00000000..532a04ed
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/Channel/Channel.swift
@@ -0,0 +1,37 @@
+import Bindings
+
+public struct Channel {
+  public var broadcast: ChannelBroadcast
+  public var broadcastAsymmetric: ChannelBroadcastAsymmetric
+  public var get: ChannelGet
+  public var listen: ChannelListen
+  public var maxAsymmetricPayloadSize: ChannelMaxAsymmetricPayloadSize
+  public var maxPayloadSize: ChannelMaxPayloadSize
+  public var stop: ChannelStop
+}
+
+extension Channel {
+  public static func live(_ bindingsChannel: BindingsChannel) -> Channel {
+    Channel(
+      broadcast: .live(bindingsChannel),
+      broadcastAsymmetric: .live(bindingsChannel),
+      get: .live(bindingsChannel),
+      listen: .live(bindingsChannel),
+      maxAsymmetricPayloadSize: .live(bindingsChannel),
+      maxPayloadSize: .live(bindingsChannel),
+      stop: .live(bindingsChannel)
+    )
+  }
+}
+
+extension Channel {
+  public static let unimplemented = Channel(
+    broadcast: .unimplemented,
+    broadcastAsymmetric: .unimplemented,
+    get: .unimplemented,
+    listen: .unimplemented,
+    maxAsymmetricPayloadSize: .unimplemented,
+    maxPayloadSize: .unimplemented,
+    stop: .unimplemented
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelBroadcast.swift b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelBroadcast.swift
new file mode 100644
index 00000000..ee9a3adf
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelBroadcast.swift
@@ -0,0 +1,22 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct ChannelBroadcast {
+  public var run: (Data) throws -> Data
+
+  public func callAsFunction(_ payload: Data) throws -> Data {
+    try run(payload)
+  }
+}
+
+extension ChannelBroadcast {
+  public static func live(_ bindingsChannel: BindingsChannel) -> ChannelBroadcast {
+    ChannelBroadcast(run: bindingsChannel.broadcast)
+  }
+}
+
+extension ChannelBroadcast {
+  public static let unimplemented = ChannelBroadcast(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelBroadcastAsymmetric.swift b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelBroadcastAsymmetric.swift
new file mode 100644
index 00000000..9d92e002
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelBroadcastAsymmetric.swift
@@ -0,0 +1,25 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct ChannelBroadcastAsymmetric {
+  public var run: (Data, Data) throws -> Data
+
+  public func callAsFunction(
+    payload: Data,
+    privateKey: Data
+  ) throws -> Data {
+    try run(payload, privateKey)
+  }
+}
+
+extension ChannelBroadcastAsymmetric {
+  public static func live(_ bindingsChannel: BindingsChannel) -> ChannelBroadcastAsymmetric {
+    ChannelBroadcastAsymmetric(run: bindingsChannel.broadcastAsymmetric(_:pk:))
+  }
+}
+
+extension ChannelBroadcastAsymmetric {
+  public static let unimplemented = ChannelBroadcastAsymmetric(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelGet.swift b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelGet.swift
new file mode 100644
index 00000000..7c27a3dc
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelGet.swift
@@ -0,0 +1,24 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct ChannelGet {
+  public var run: () throws -> ChannelDef
+
+  public func callAsFunction() throws -> ChannelDef {
+    try run()
+  }
+}
+
+extension ChannelGet {
+  public static func live(_ bindingsChannel: BindingsChannel) -> ChannelGet {
+    ChannelGet {
+      try ChannelDef.decode(bindingsChannel.get())
+    }
+  }
+}
+
+extension ChannelGet {
+  public static let unimplemented = ChannelGet(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelListen.swift b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelListen.swift
new file mode 100644
index 00000000..65fc1089
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelListen.swift
@@ -0,0 +1,30 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct ChannelListen {
+  public var run: (Int, BroadcastListener) throws -> Void
+
+  public func callAsFunction(
+    method: Int,
+    callback: BroadcastListener
+  ) throws {
+    try run(method, callback)
+  }
+}
+
+extension ChannelListen {
+  public static func live(_ bindingsChannel: BindingsChannel) -> ChannelListen {
+    ChannelListen { method, callback in
+      try bindingsChannel.listen(
+        callback.makeBindingsBroadcastListener(),
+        method: method
+      )
+    }
+  }
+}
+
+extension ChannelListen {
+  public static let unimplemented = ChannelListen(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelMaxAsymmetricPayloadSize.swift b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelMaxAsymmetricPayloadSize.swift
new file mode 100644
index 00000000..6b315b0f
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelMaxAsymmetricPayloadSize.swift
@@ -0,0 +1,22 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct ChannelMaxAsymmetricPayloadSize {
+  public var run: () -> Int
+
+  public func callAsFunction() -> Int {
+    run()
+  }
+}
+
+extension ChannelMaxAsymmetricPayloadSize {
+  public static func live(_ bindingsChannel: BindingsChannel) -> ChannelMaxAsymmetricPayloadSize {
+    ChannelMaxAsymmetricPayloadSize(run: bindingsChannel.maxAsymmetricPayloadSize)
+  }
+}
+
+extension ChannelMaxAsymmetricPayloadSize {
+  public static let unimplemented = ChannelMaxAsymmetricPayloadSize(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelMaxPayloadSize.swift b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelMaxPayloadSize.swift
new file mode 100644
index 00000000..b6ef89f8
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelMaxPayloadSize.swift
@@ -0,0 +1,22 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct ChannelMaxPayloadSize {
+  public var run: () -> Int
+
+  public func callAsFunction() -> Int {
+    run()
+  }
+}
+
+extension ChannelMaxPayloadSize {
+  public static func live(_ bindingsChannel: BindingsChannel) -> ChannelMaxPayloadSize {
+    ChannelMaxPayloadSize(run: bindingsChannel.maxPayloadSize)
+  }
+}
+
+extension ChannelMaxPayloadSize {
+  public static let unimplemented = ChannelMaxPayloadSize(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelStop.swift b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelStop.swift
new file mode 100644
index 00000000..faddcb18
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/Channel/Functors/ChannelStop.swift
@@ -0,0 +1,22 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct ChannelStop {
+  public var run: () -> Void
+
+  public func callAsFunction() {
+    run()
+  }
+}
+
+extension ChannelStop {
+  public static func live(_ bindingsChannel: BindingsChannel) -> ChannelStop {
+    ChannelStop(run: bindingsChannel.stop)
+  }
+}
+
+extension ChannelStop {
+  public static let unimplemented = ChannelStop(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
-- 
GitLab