-
Dariusz Rybicki authoredDariusz Rybicki authored
MessageSender.swift 1.15 KiB
import Bindings
public struct MessageSender {
public var send: (Int, Data) throws -> MessageSendReport
public func callAsFunction(
messageType: Int,
payload: Data
) throws -> MessageSendReport {
try send(messageType, payload)
}
}
extension MessageSender {
public static func live(
bindingsConnection: BindingsConnection
) -> MessageSender {
MessageSender.live(sendE2E: bindingsConnection.sendE2E(_:payload:))
}
public static func live(
bindingsAuthenticatedConnection: BindingsAuthenticatedConnection
) -> MessageSender {
MessageSender.live(sendE2E: bindingsAuthenticatedConnection.sendE2E(_:payload:))
}
private static func live(
sendE2E: @escaping (Int, Data) throws -> Data
) -> MessageSender {
MessageSender { messageType, payload in
let reportData = try sendE2E(messageType, payload)
let decoder = JSONDecoder()
let report = try decoder.decode(MessageSendReport.self, from: reportData)
return report
}
}
}
#if DEBUG
extension MessageSender {
public static let failing = MessageSender { _, _ in
struct NotImplemented: Error {}
throw NotImplemented()
}
}
#endif