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