From 775f2663d809c4b6eb4c26e3bb1779e42152891b Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Tue, 26 Jul 2022 13:10:44 +0100 Subject: [PATCH] Add RequestRestlike functor --- Sources/ElixxirDAppsSDK/RequestRestlike.swift | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/RequestRestlike.swift diff --git a/Sources/ElixxirDAppsSDK/RequestRestlike.swift b/Sources/ElixxirDAppsSDK/RequestRestlike.swift new file mode 100644 index 00000000..04d25ecb --- /dev/null +++ b/Sources/ElixxirDAppsSDK/RequestRestlike.swift @@ -0,0 +1,41 @@ +import Bindings +import XCTestDynamicOverlay + +public struct RequestRestlike { + public var run: (Int, Data, RestlikeMessage, Data) throws -> RestlikeMessage + + public func callAsFunction( + e2eId: Int, + recipient: Data, + request: RestlikeMessage, + paramsJSON: Data + ) throws -> RestlikeMessage { + try run(e2eId, recipient, request, paramsJSON) + } +} + +extension RequestRestlike { + public static let live = RequestRestlike { e2dId, recipient, request, paramsJSON in + var error: NSError? + let responseData = BindingsRequestRestLike( + e2dId, + recipient, + try request.encode(), + paramsJSON, + &error + ) + if let error = error { + throw error + } + guard let responseData = responseData else { + fatalError("BindingsRequestRestLike returned `nil` without providing error") + } + return try RestlikeMessage.decode(responseData) + } +} + +extension RequestRestlike { + public static let unimplemented = RequestRestlike( + run: XCTUnimplemented("\(Self.self)") + ) +} -- GitLab