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

Add RestlikeRequest functor

parent 41e2902e
No related branches found
No related tags found
2 merge requests!102Release 1.0.0,!18Update Bindings
//import Bindings
//
//public struct RestlikeRequestSender {
// public var send: (Int, Int, RestlikeMessage) throws -> RestlikeMessage
//
// public func callAsFunction(
// clientId: Int,
// connectionId: Int,
// request: RestlikeMessage
// ) throws -> RestlikeMessage {
// try send(clientId, connectionId, request)
// }
//}
//
//extension RestlikeRequestSender {
// public static func live(authenticated: Bool) -> RestlikeRequestSender {
// RestlikeRequestSender { clientId, connectionId, request in
// let encoder = JSONEncoder()
// let requestData = try encoder.encode(request)
// var error: NSError?
// let responseData: Data?
// if authenticated {
// responseData = BindingsRestlikeRequestAuth(clientId, connectionId, requestData, &error)
// } else {
// responseData = BindingsRestlikeRequest(clientId, connectionId, requestData, &error)
// }
// if let error = error {
// throw error
// }
// guard let responseData = responseData else {
// let functionName = "BindingsRestlikeRequest\(authenticated ? "Auth" : "")"
// fatalError("\(functionName) returned `nil` without providing error")
// }
// let decoder = JSONDecoder()
// let response = try decoder.decode(RestlikeMessage.self, from: responseData)
// return response
// }
// }
//}
//
//#if DEBUG
//extension RestlikeRequestSender {
// public static let failing = RestlikeRequestSender { _, _, _ in
// struct NotImplemented: Error {}
// throw NotImplemented()
// }
//}
//#endif
import Bindings
import XCTestDynamicOverlay
public struct RestlikeRequest {
public var run: (Bool, Int, Int, RestlikeMessage, Data) throws -> RestlikeMessage
public func callAsFunction(
authenticated: Bool,
clientId: Int,
connectionId: Int,
request: RestlikeMessage,
e2eParams: Data
) throws -> RestlikeMessage {
try run(authenticated, clientId, connectionId, request, e2eParams)
}
}
extension RestlikeRequest {
public static func live() -> RestlikeRequest {
RestlikeRequest { authenticated, clientId, connectionId, request, e2eParams in
let requestData = try request.encode()
var error: NSError?
let responseData: Data?
if authenticated {
responseData = BindingsRestlikeRequest(
clientId,
connectionId,
requestData,
e2eParams,
&error
)
} else {
responseData = BindingsRestlikeRequestAuth(
clientId,
connectionId,
requestData,
e2eParams,
&error
)
}
if let error = error {
throw error
}
guard let responseData = responseData else {
let functionName = "BindingsRestlikeRequest\(authenticated ? "Auth" : "")"
fatalError("\(functionName) returned `nil` without providing error")
}
return try RestlikeMessage.decode(responseData)
}
}
}
extension RestlikeRequest {
public static let unimplemented = RestlikeRequest(
run: XCTUnimplemented("\(Self.self)")
)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment