@@ -10,7 +10,7 @@ public protocol InternalClient {
1010 var host : String { get }
1111 var port : Int ? { get }
1212 var basePath : String ? { get }
13-
13+
1414 var httpClient : Vapor . Client { get }
1515 var logger : Logger { get }
1616}
@@ -22,32 +22,32 @@ public enum InternalClientError: Error {
2222public extension InternalClient {
2323 var scheme : URI . Scheme { URI . Scheme ( " http " ) }
2424 var basePath : String ? { nil }
25-
25+
2626 func send< Request: InternalRequest , Response: InternalResponse > ( _ request: Request ) -> EventLoopFuture < Response > {
2727 let clientRequest = buildClientRequest ( for: request)
28-
28+
2929 return httpClient. send ( buildClientRequest ( for: request) )
3030 . always { self . logger. info ( " response for request \( clientRequest. url) : \( $0) " ) }
3131 . mapToInternalResponse ( )
3232 }
33-
33+
3434 internal func buildClientRequest< R: InternalRequest > ( for request: R ) -> ClientRequest {
3535 let path = basePath. flatMap { base in request. path. flatMap { " \( base) / \( $0) " } ?? base } ?? request. path ?? " "
36-
36+
3737 let query = request. query. flatMap { queries in
3838 queries. compactMap { query -> String ? in
3939 guard let value = query. value else { return nil }
40-
40+
4141 guard let escapedValue = value. addingPercentEncoding ( withAllowedCharacters: . urlQueryAllowed) else {
4242 return nil
4343 }
44-
44+
4545 return " \( query. name) = \( escapedValue) "
4646 } . joined ( separator: " & " )
4747 }
48-
48+
4949 let url = URI ( scheme: scheme, host: host, port: port, path: path, query: query)
50-
50+
5151 var clientRequest = ClientRequest ( )
5252 request. headers. flatMap { clientRequest. headers = . init( $0. map { ( key, value) in ( key, value) } ) }
5353 clientRequest. method = request. method
@@ -64,27 +64,7 @@ private extension EventLoopFuture where Value: InternalResponse {
6464 case ( 100 ..< 400 ) :
6565 return . success( R ( headers: response. headers, status: response. status, body: response. body) )
6666 default :
67- do {
68- let contentError = try response. content. decode ( Internal . ServiceError. self)
69- return . failure( Internal . ErrorResponse ( headers: response. headers,
70- status: response. status,
71- message: contentError. message) )
72- } catch DecodingError . keyNotFound {
73- do {
74- let contentError = try response. content. decode ( String . self)
75- return . failure( Internal . ErrorResponse ( headers: response. headers,
76- status: response. status,
77- message: contentError) )
78- } catch {
79- return . failure( Internal . ErrorResponse ( headers: [ : ] ,
80- status: . internalServerError,
81- message: " failed to decode response with error \( error) " ) )
82- }
83- } catch {
84- return . failure( Internal . ErrorResponse ( headers: [ : ] ,
85- status: . internalServerError,
86- message: " failed to decode response with error \( error) " ) )
87- }
67+ return . failure( Internal . ErrorResponse ( response: response) )
8868 }
8969 }
9070 }
0 commit comments