diff --git a/Sources/ElixxirDAppsSDK/Client.swift b/Sources/ElixxirDAppsSDK/Client.swift index 6cfc8fe9cfd8702a1903bec56e1087dc09687a64..38e236ace9ac689fdf9def0b0fac6324b6723e1e 100644 --- a/Sources/ElixxirDAppsSDK/Client.swift +++ b/Sources/ElixxirDAppsSDK/Client.swift @@ -4,6 +4,7 @@ public struct Client { public var networkFollower: NetworkFollower public var waitForNetwork: NetworkWaiter public var makeIdentity: IdentityMaker + public var connect: ConnectionMaker } extension Client { @@ -11,7 +12,8 @@ extension Client { Client( networkFollower: .live(bindingsClient: bindingsClient), waitForNetwork: .live(bindingsClient: bindingsClient), - makeIdentity: .live(bindingsClient: bindingsClient) + makeIdentity: .live(bindingsClient: bindingsClient), + connect: .live(bindingsClient: bindingsClient) ) } } @@ -21,7 +23,8 @@ extension Client { public static let failing = Client( networkFollower: .failing, waitForNetwork: .failing, - makeIdentity: .failing + makeIdentity: .failing, + connect: .failing ) } #endif diff --git a/Sources/ElixxirDAppsSDK/Connection.swift b/Sources/ElixxirDAppsSDK/Connection.swift new file mode 100644 index 0000000000000000000000000000000000000000..2633c603df46a405d1684af9e41f27f4d4144489 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/Connection.swift @@ -0,0 +1,31 @@ +import Bindings + +public struct Connection { + public var isAuthenticated: () -> Bool +} + +extension Connection { + public static func live( + bindingsConnection: BindingsConnection + ) -> Connection { + Connection( + isAuthenticated: { false } + ) + } + + public static func live( + bindingsAuthenticatedConnection: BindingsAuthenticatedConnection + ) -> Connection { + Connection( + isAuthenticated: bindingsAuthenticatedConnection.isAuthenticated + ) + } +} + +#if DEBUG +extension Connection { + public static let failing = Connection( + isAuthenticated: { false } + ) +} +#endif diff --git a/Sources/ElixxirDAppsSDK/ConnectionMaker.swift b/Sources/ElixxirDAppsSDK/ConnectionMaker.swift new file mode 100644 index 0000000000000000000000000000000000000000..a898075f447753cba661589313ba86212727ebae --- /dev/null +++ b/Sources/ElixxirDAppsSDK/ConnectionMaker.swift @@ -0,0 +1,44 @@ +import Bindings + +public struct ConnectionMaker { + public var connect: (Bool, Data, Data) throws -> Connection + + public func callAsFunction( + withAuthentication: Bool, + recipientContact: Data, + myIdentity: Data + ) throws -> Connection { + try connect(withAuthentication, recipientContact, myIdentity) + } +} + +extension ConnectionMaker { + public static func live(bindingsClient: BindingsClient) -> ConnectionMaker { + ConnectionMaker { withAuthentication, recipientContact, myIdentity in + if withAuthentication { + return Connection.live( + bindingsConnection: try bindingsClient.connect( + recipientContact, + myIdentity: myIdentity + ) + ) + } else { + return Connection.live( + bindingsAuthenticatedConnection: try bindingsClient.connect( + withAuthentication: recipientContact, + myIdentity: myIdentity + ) + ) + } + } + } +} + +#if DEBUG +extension ConnectionMaker { + public static let failing = ConnectionMaker { _, _, _ in + struct NotImplemented: Error {} + throw NotImplemented() + } +} +#endif