From 8652edd200426987d118733db3b675f3e71058bb Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Wed, 27 Jul 2022 15:56:37 +0100 Subject: [PATCH] Add TransmitSingleUse functor --- .../Functors/TransmitSingleUse.swift | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/Functors/TransmitSingleUse.swift diff --git a/Sources/ElixxirDAppsSDK/Functors/TransmitSingleUse.swift b/Sources/ElixxirDAppsSDK/Functors/TransmitSingleUse.swift new file mode 100644 index 00000000..07af4e12 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Functors/TransmitSingleUse.swift @@ -0,0 +1,63 @@ +import Bindings +import XCTestDynamicOverlay + +public struct TransmitSingleUse { + public struct Params: Equatable { + public init( + e2eId: Int, + recipient: Data, + tag: String, + payload: Data, + paramsJSON: Data + ) { + self.e2eId = e2eId + self.recipient = recipient + self.tag = tag + self.payload = payload + self.paramsJSON = paramsJSON + } + + public var e2eId: Int + public var recipient: Data + public var tag: String + public var payload: Data + public var paramsJSON: Data + } + + public var run: (Params, SingleUseResponse) throws -> SingleUseSendReport + + public func callAsFunction( + params: Params, + callback: SingleUseResponse + ) throws -> SingleUseSendReport { + try run(params, callback) + } +} + +extension TransmitSingleUse { + public static let live = TransmitSingleUse { params, callback in + var error: NSError? + let reportData = BindingsTransmitSingleUse( + params.e2eId, + params.recipient, + params.tag, + params.payload, + params.paramsJSON, + callback.makeBindingsSingleUseResponse(), + &error + ) + if let error = error { + throw error + } + guard let reportData = reportData else { + fatalError("BindingsTransmitSingleUse returned `nil` without providing error") + } + return try SingleUseSendReport.decode(reportData) + } +} + +extension TransmitSingleUse { + public static let unimplemented = TransmitSingleUse( + run: XCTUnimplemented("\(Self.self)") + ) +} -- GitLab