From 7848256732119aec87d6c08e907d05bf21f0b9e1 Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Wed, 1 Jun 2022 11:55:28 +0200 Subject: [PATCH] Add ClientLoader --- Sources/ElixxirDAppsSDK/ClientLoader.swift | 30 ++++++++++++++++++++++ Sources/ElixxirDAppsSDK/Errors.swift | 4 +++ 2 files changed, 34 insertions(+) create mode 100644 Sources/ElixxirDAppsSDK/ClientLoader.swift diff --git a/Sources/ElixxirDAppsSDK/ClientLoader.swift b/Sources/ElixxirDAppsSDK/ClientLoader.swift new file mode 100644 index 00000000..632f0107 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/ClientLoader.swift @@ -0,0 +1,30 @@ +import Bindings + +public struct ClientLoader { + public var load: (URL, Data) throws -> Client + + public func callAsFunction(directoryURL: URL, password: Data) throws -> Client { + try load(directoryURL, password) + } +} + +extension ClientLoader { + public static let live = ClientLoader { directoryURL, password in + var error: NSError? + let bindingsClient = BindingsLogin(directoryURL.path, password, &error) + if let error = error { throw error } + guard let bindingsClient = bindingsClient else { + throw BindingsLoginUnknownError() + } + return Client.live(bindingsClient: bindingsClient) + } +} + +#if DEBUG +extension ClientLoader { + public static let failing = ClientLoader { _, _ in + struct NotImplemented: Error {} + throw NotImplemented() + } +} +#endif diff --git a/Sources/ElixxirDAppsSDK/Errors.swift b/Sources/ElixxirDAppsSDK/Errors.swift index 94f93f98..d28f5baf 100644 --- a/Sources/ElixxirDAppsSDK/Errors.swift +++ b/Sources/ElixxirDAppsSDK/Errors.swift @@ -13,3 +13,7 @@ public struct PasswordStorageMissingPasswordError: Error, Equatable { public struct BindingsNewClientUnknownError: Error, Equatable { public init() {} } + +public struct BindingsLoginUnknownError: Error, Equatable { + public init() {} +} -- GitLab