diff --git a/Sources/ElixxirDAppsSDK/Functors/LoadOrNewUserDiscovery.swift b/Sources/ElixxirDAppsSDK/Functors/LoadOrNewUserDiscovery.swift new file mode 100644 index 0000000000000000000000000000000000000000..f1817eb0a066a6c73daa6b076834cc062c5a9262 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Functors/LoadOrNewUserDiscovery.swift @@ -0,0 +1,43 @@ +import Bindings +import XCTestDynamicOverlay + +public struct LoadOrNewUserDiscovery { + public var run: (Int, UdNetworkStatus, String, Data) throws -> UserDiscovery + + public func callAsFunction( + e2eId: Int, + follower: UdNetworkStatus, + username: String, + registrationValidationSignature: Data + ) throws -> UserDiscovery { + try run(e2eId, follower, username, registrationValidationSignature) + } +} + +extension LoadOrNewUserDiscovery { + public static let live = LoadOrNewUserDiscovery { + e2eId, follower, username, registrationValidationSignature in + + var error: NSError? + let bindingsUD = BindingsLoadOrNewUserDiscovery( + e2eId, + follower.makeBindingsUdNetworkStatus(), + username, + registrationValidationSignature, + &error + ) + if let error = error { + throw error + } + guard let bindingsUD = bindingsUD else { + fatalError("BindingsLoadOrNewUserDiscovery returned `nil` without providing error") + } + return .live(bindingsUD) + } +} + +extension LoadOrNewUserDiscovery { + public static let unimplemented = LoadOrNewUserDiscovery( + run: XCTUnimplemented("\(Self.self)") + ) +}