diff --git a/Sources/ElixxirDAppsSDK/Client.swift b/Sources/ElixxirDAppsSDK/Client.swift index 49a970947ecb0c5b5e80a3965d1dc0399855fbab..47f4b2ef586c2f2cdbe7bb3730c4308af5d7faa3 100644 --- a/Sources/ElixxirDAppsSDK/Client.swift +++ b/Sources/ElixxirDAppsSDK/Client.swift @@ -1,17 +1,21 @@ import Bindings public struct Client { - + public var networkFollower: NetworkFollower } extension Client { public static func live(bindingsClient: BindingsClient) -> Client { - Client() + Client( + networkFollower: .live(bindingsClient: bindingsClient) + ) } } #if DEBUG extension Client { - public static let failing = Client() + public static let failing = Client( + networkFollower: .failing + ) } #endif diff --git a/Sources/ElixxirDAppsSDK/NetworkFollower.swift b/Sources/ElixxirDAppsSDK/NetworkFollower.swift new file mode 100644 index 0000000000000000000000000000000000000000..31dab0901a0b5cbc8ebc20ba97478e64a4661d4a --- /dev/null +++ b/Sources/ElixxirDAppsSDK/NetworkFollower.swift @@ -0,0 +1,24 @@ +import Bindings + +public struct NetworkFollower { + public var status: NetworkFollowerStatusProvider + public var start: NetworkFollowerStarter +} + +extension NetworkFollower { + public static func live(bindingsClient: BindingsClient) -> NetworkFollower { + NetworkFollower( + status: .live(bindingsClient: bindingsClient), + start: .live(bindingsClient: bindingsClient) + ) + } +} + +#if DEBUG +extension NetworkFollower { + public static let failing = NetworkFollower( + status: .failing, + start: .failing + ) +} +#endif diff --git a/Sources/ElixxirDAppsSDK/NetworkFollowerStarter.swift b/Sources/ElixxirDAppsSDK/NetworkFollowerStarter.swift new file mode 100644 index 0000000000000000000000000000000000000000..54b8c23747467874109ba52931e727a9cdd75c71 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/NetworkFollowerStarter.swift @@ -0,0 +1,26 @@ +import Bindings + +public struct NetworkFollowerStarter { + public var start: (_ timeoutMS: Int) throws -> Void + + public func callAsFunction(timeoutMS: Int) throws { + try start(timeoutMS) + } +} + +extension NetworkFollowerStarter { + public static func live(bindingsClient: BindingsClient) -> NetworkFollowerStarter { + NetworkFollowerStarter { timeoutMS in + try bindingsClient.startNetworkFollower(timeoutMS) + } + } +} + +#if DEBUG +extension NetworkFollowerStarter { + public static let failing = NetworkFollowerStarter { _ in + struct NotImplemented: Error {} + throw NotImplemented() + } +} +#endif diff --git a/Sources/ElixxirDAppsSDK/NetworkFollowerStatus.swift b/Sources/ElixxirDAppsSDK/NetworkFollowerStatus.swift new file mode 100644 index 0000000000000000000000000000000000000000..8630aafe29e7f7f3703abb701bb5df1f4c3fc2b0 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/NetworkFollowerStatus.swift @@ -0,0 +1,29 @@ +public enum NetworkFollowerStatus: Equatable { + case stopped + case starting + case running + case stopping + case unknown(code: Int) +} + +extension NetworkFollowerStatus { + public init(rawValue: Int) { + switch rawValue { + case 0: self = .stopped + case 1_000: self = .starting + case 2_000: self = .running + case 3_000: self = .stopping + case let code: self = .unknown(code: code) + } + } + + public var rawValue: Int { + switch self { + case .stopped: return 0 + case .starting: return 1_000 + case .running: return 2_000 + case .stopping: return 3_000 + case .unknown(let code): return code + } + } +} diff --git a/Sources/ElixxirDAppsSDK/NetworkFollowerStatusProvider.swift b/Sources/ElixxirDAppsSDK/NetworkFollowerStatusProvider.swift new file mode 100644 index 0000000000000000000000000000000000000000..ee8d5cc34ac46dee092b4faf8a2b664ab1f90784 --- /dev/null +++ b/Sources/ElixxirDAppsSDK/NetworkFollowerStatusProvider.swift @@ -0,0 +1,26 @@ +import Bindings + +public struct NetworkFollowerStatusProvider { + public var status: () -> NetworkFollowerStatus + + public func callAsFunction() -> NetworkFollowerStatus { + status() + } +} + +extension NetworkFollowerStatusProvider { + public static func live(bindingsClient: BindingsClient) -> NetworkFollowerStatusProvider { + NetworkFollowerStatusProvider { + let rawValue = bindingsClient.networkFollowerStatus() + return NetworkFollowerStatus(rawValue: rawValue) + } + } +} + +#if DEBUG +extension NetworkFollowerStatusProvider { + public static let failing = NetworkFollowerStatusProvider { + .unknown(code: -1) + } +} +#endif