diff --git a/Sources/ElixxirDAppsSDK/Functors/InitFileTransfer.swift b/Sources/ElixxirDAppsSDK/Functors/InitFileTransfer.swift new file mode 100644 index 0000000000000000000000000000000000000000..5d9712d7da2fd078222df9f7dc5e86b73c997a81 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Functors/InitFileTransfer.swift @@ -0,0 +1,43 @@ +import Bindings +import XCTestDynamicOverlay + +public struct InitFileTransfer { + public var run: (Int, Data, Data, ReceiveFileCallback) throws -> FileTransfer + + public func callAsFunction( + e2eId: Int, + e2eFileTransferParamsJSON: Data, + fileTransferParamsJSON: Data, + callback: ReceiveFileCallback + ) throws -> FileTransfer { + try run(e2eId, e2eFileTransferParamsJSON, fileTransferParamsJSON, callback) + } +} + +extension InitFileTransfer { + public static let live = InitFileTransfer { + e2eId, e2eFileTransferParamsJSON, fileTransferParamsJSON, callback in + + var error: NSError? + let bindingsFileTransfer = BindingsInitFileTransfer( + e2eId, + callback.makeBindingsReceiveFileCallback(), + e2eFileTransferParamsJSON, + fileTransferParamsJSON, + &error + ) + if let error = error { + throw error + } + guard let bindingsFileTransfer = bindingsFileTransfer else { + fatalError("BindingsInitFileTransfer returned `nil` without providing error") + } + return .live(bindingsFileTransfer) + } +} + +extension InitFileTransfer { + public static let unimplemented = InitFileTransfer( + run: XCTUnimplemented("\(Self.self)") + ) +}