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

Add Connection and ConnectionMaker

parent 0966c115
Branches
Tags
1 merge request!2Bindings API wrapper
......@@ -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
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
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment