From 10a3cf598dbb8500ba00247ba78cde5e4e4c7089 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Thu, 2 Jun 2022 22:46:16 +0200
Subject: [PATCH] Add RestlikeRequestSender

---
 .../RestlikeRequestSender.swift               | 44 +++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 Sources/ElixxirDAppsSDK/RestlikeRequestSender.swift

diff --git a/Sources/ElixxirDAppsSDK/RestlikeRequestSender.swift b/Sources/ElixxirDAppsSDK/RestlikeRequestSender.swift
new file mode 100644
index 00000000..fda472aa
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/RestlikeRequestSender.swift
@@ -0,0 +1,44 @@
+import Bindings
+
+public struct RestlikeRequestSender {
+  public var send: (Int, Int, Data) throws -> Data
+
+  public func callAsFunction(
+    clientId: Int,
+    connectionId: Int,
+    request: Data
+  ) throws -> Data {
+    try send(clientId, connectionId, request)
+  }
+}
+
+extension RestlikeRequestSender {
+  public static func live(authenticated: Bool) -> RestlikeRequestSender {
+    RestlikeRequestSender { clientId, connectionId, request in
+      var error: NSError?
+      let response: Data?
+      if authenticated {
+        response = BindingsRestlikeRequestAuth(clientId, connectionId, request, &error)
+      } else {
+        response = BindingsRestlikeRequest(clientId, connectionId, request, &error)
+      }
+      if let error = error {
+        throw error
+      }
+      guard let response = response else {
+        let functionName = "BindingsRestlikeRequest\(authenticated ? "Auth" : "")"
+        fatalError("\(functionName) returned `nil` without providing error")
+      }
+      return response
+    }
+  }
+}
+
+#if DEBUG
+extension RestlikeRequestSender {
+  public static let failing = RestlikeRequestSender { _, _, _ in
+    struct NotImplemented: Error {}
+    throw NotImplemented()
+  }
+}
+#endif
-- 
GitLab