Skip to content
Snippets Groups Projects
Commit a6a7cbad authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add ClientError and ClientErrorListener

parent 8dfd7580
No related branches found
No related tags found
1 merge request!2Bindings API wrapper
......@@ -5,6 +5,7 @@ public struct Client {
public var waitForNetwork: NetworkWaiter
public var isNetworkHealthy: NetworkHealthProvider
public var monitorNetworkHealth: NetworkHealthListener
public var listenErrors: ClientErrorListener
public var makeIdentity: IdentityMaker
public var connect: ConnectionMaker
public var waitForDelivery: MessageDeliveryWaiter
......@@ -17,6 +18,7 @@ extension Client {
waitForNetwork: .live(bindingsClient: bindingsClient),
isNetworkHealthy: .live(bindingsClient: bindingsClient),
monitorNetworkHealth: .live(bindingsClient: bindingsClient),
listenErrors: .live(bindingsClient: bindingsClient),
makeIdentity: .live(bindingsClient: bindingsClient),
connect: .live(bindingsClient: bindingsClient),
waitForDelivery: .live(bindingsClient: bindingsClient)
......@@ -31,6 +33,7 @@ extension Client {
waitForNetwork: .failing,
isNetworkHealthy: .failing,
monitorNetworkHealth: .failing,
listenErrors: .failing,
makeIdentity: .failing,
connect: .failing,
waitForDelivery: .failing
......
public struct ClientError: Error, Equatable {
public init(source: String, message: String, trace: String) {
self.source = source
self.message = message
self.trace = trace
}
public var source: String
public var message: String
public var trace: String
}
import Bindings
public struct ClientErrorListener {
public var listen: (@escaping (ClientError) -> Void) -> Void
public func callAsFunction(callback: @escaping (ClientError) -> Void) {
listen(callback)
}
}
extension ClientErrorListener {
public static func live(bindingsClient: BindingsClient) -> ClientErrorListener {
ClientErrorListener { callback in
let listener = Listener(onReport: callback)
bindingsClient.registerErrorCallback(listener)
}
}
}
private final class Listener: NSObject, BindingsClientErrorProtocol {
init(onReport: @escaping (ClientError) -> Void) {
self.onReport = onReport
super.init()
}
let onReport: (ClientError) -> Void
func report(_ source: String?, message: String?, trace: String?) {
guard let source = source else {
fatalError("BindingsClientError.source is `nil`")
}
guard let message = message else {
fatalError("BindingsClientError.message is `nil`")
}
guard let trace = trace else {
fatalError("BindingsClientError.trace is `nil`")
}
onReport(ClientError(source: source, message: message, trace: trace))
}
}
#if DEBUG
extension ClientErrorListener {
public static let failing = ClientErrorListener { _ in
fatalError("Not implemented")
}
}
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment