From 63bb6b2a358bb165373b91555338ea8fd325f819 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Tue, 26 Jul 2022 11:07:50 +0100
Subject: [PATCH] Add RestlikeRequest functor

---
 .../Legacy/RestlikeRequestSender.swift        | 48 ----------------
 Sources/ElixxirDAppsSDK/RestlikeRequest.swift | 57 +++++++++++++++++++
 2 files changed, 57 insertions(+), 48 deletions(-)
 delete mode 100644 Sources/ElixxirDAppsSDK/Legacy/RestlikeRequestSender.swift
 create mode 100644 Sources/ElixxirDAppsSDK/RestlikeRequest.swift

diff --git a/Sources/ElixxirDAppsSDK/Legacy/RestlikeRequestSender.swift b/Sources/ElixxirDAppsSDK/Legacy/RestlikeRequestSender.swift
deleted file mode 100644
index 435fa8f7..00000000
--- a/Sources/ElixxirDAppsSDK/Legacy/RestlikeRequestSender.swift
+++ /dev/null
@@ -1,48 +0,0 @@
-//import Bindings
-//
-//public struct RestlikeRequestSender {
-//  public var send: (Int, Int, RestlikeMessage) throws -> RestlikeMessage
-//
-//  public func callAsFunction(
-//    clientId: Int,
-//    connectionId: Int,
-//    request: RestlikeMessage
-//  ) throws -> RestlikeMessage {
-//    try send(clientId, connectionId, request)
-//  }
-//}
-//
-//extension RestlikeRequestSender {
-//  public static func live(authenticated: Bool) -> RestlikeRequestSender {
-//    RestlikeRequestSender { clientId, connectionId, request in
-//      let encoder = JSONEncoder()
-//      let requestData = try encoder.encode(request)
-//      var error: NSError?
-//      let responseData: Data?
-//      if authenticated {
-//        responseData = BindingsRestlikeRequestAuth(clientId, connectionId, requestData, &error)
-//      } else {
-//        responseData = BindingsRestlikeRequest(clientId, connectionId, requestData, &error)
-//      }
-//      if let error = error {
-//        throw error
-//      }
-//      guard let responseData = responseData else {
-//        let functionName = "BindingsRestlikeRequest\(authenticated ? "Auth" : "")"
-//        fatalError("\(functionName) returned `nil` without providing error")
-//      }
-//      let decoder = JSONDecoder()
-//      let response = try decoder.decode(RestlikeMessage.self, from: responseData)
-//      return response
-//    }
-//  }
-//}
-//
-//#if DEBUG
-//extension RestlikeRequestSender {
-//  public static let failing = RestlikeRequestSender { _, _, _ in
-//    struct NotImplemented: Error {}
-//    throw NotImplemented()
-//  }
-//}
-//#endif
diff --git a/Sources/ElixxirDAppsSDK/RestlikeRequest.swift b/Sources/ElixxirDAppsSDK/RestlikeRequest.swift
new file mode 100644
index 00000000..0f9f4bae
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/RestlikeRequest.swift
@@ -0,0 +1,57 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct RestlikeRequest {
+  public var run: (Bool, Int, Int, RestlikeMessage, Data) throws -> RestlikeMessage
+
+  public func callAsFunction(
+    authenticated: Bool,
+    clientId: Int,
+    connectionId: Int,
+    request: RestlikeMessage,
+    e2eParams: Data
+  ) throws -> RestlikeMessage {
+    try run(authenticated, clientId, connectionId, request, e2eParams)
+  }
+}
+
+extension RestlikeRequest {
+  public static func live() -> RestlikeRequest {
+    RestlikeRequest { authenticated, clientId, connectionId, request, e2eParams in
+      let requestData = try request.encode()
+      var error: NSError?
+      let responseData: Data?
+      if authenticated {
+        responseData = BindingsRestlikeRequest(
+          clientId,
+          connectionId,
+          requestData,
+          e2eParams,
+          &error
+        )
+      } else {
+        responseData = BindingsRestlikeRequestAuth(
+          clientId,
+          connectionId,
+          requestData,
+          e2eParams,
+          &error
+        )
+      }
+      if let error = error {
+        throw error
+      }
+      guard let responseData = responseData else {
+        let functionName = "BindingsRestlikeRequest\(authenticated ? "Auth" : "")"
+        fatalError("\(functionName) returned `nil` without providing error")
+      }
+      return try RestlikeMessage.decode(responseData)
+    }
+  }
+}
+
+extension RestlikeRequest {
+  public static let unimplemented = RestlikeRequest(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
-- 
GitLab