diff --git a/Sources/XXClient/Functions/MultiLookupUD.swift b/Sources/XXClient/Functions/MultiLookupUD.swift new file mode 100644 index 0000000000000000000000000000000000000000..0cf81669219d1327ae1686056253a747762a1055 --- /dev/null +++ b/Sources/XXClient/Functions/MultiLookupUD.swift @@ -0,0 +1,57 @@ +import Bindings +import XCTestDynamicOverlay + +public struct MultiLookupUD { + public struct Params: Equatable { + public init( + e2eId: Int, + udContact: Data, + lookupIds: [Data], + singleRequestParams: Data = GetSingleUseParams.liveDefault() + ) { + self.e2eId = e2eId + self.udContact = udContact + self.lookupIds = lookupIds + self.singleRequestParams = singleRequestParams + } + + public var e2eId: Int + public var udContact: Data + public var lookupIds: [Data] + public var singleRequestParams: Data + } + + public var run: (Params, UdMultiLookupCallback) throws -> Void + + public func callAsFunction(params: Params, callback: UdMultiLookupCallback) throws -> Void { + try run(params, callback) + } +} + +extension MultiLookupUD { + public static func live() -> MultiLookupUD { + MultiLookupUD { params, callback in + var error: NSError? + let result = BindingsMultiLookupUD( + params.e2eId, + params.udContact, + callback.makeBindingsUdMultiLookupCallback(), + try JSONEncoder().encode(params.lookupIds), + params.singleRequestParams, + &error + ) + if let error = error { + throw error + } + guard result else { + fatalError("BindingsMultiLookupUD returned `false` without providing error") + } + } + } +} + +extension MultiLookupUD { + public static let unimplemented = MultiLookupUD( + run: XCTUnimplemented("\(Self.self)") + ) +}