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