1
1
use crate :: adaptor:: { ConduitRequest , RequestInfo } ;
2
2
use crate :: service:: ServiceError ;
3
- use crate :: HyperResponse ;
3
+ use crate :: { conduit_into_hyper , HyperResponse } ;
4
4
5
5
use std:: net:: SocketAddr ;
6
6
use std:: sync:: {
7
7
atomic:: { AtomicUsize , Ordering } ,
8
8
Arc ,
9
9
} ;
10
10
11
- use conduit:: Handler ;
11
+ use conduit:: { header , Handler , StatusCode } ;
12
12
use hyper:: { Body , Request , Response } ;
13
13
use tracing:: error;
14
14
15
- type ConduitResponse = Response < conduit:: Body > ;
16
-
17
15
#[ derive( Debug ) ]
18
16
pub struct BlockingHandler < H : Handler > {
19
17
thread_count : AtomicUsize ,
@@ -54,31 +52,20 @@ impl<H: Handler> BlockingHandler<H> {
54
52
let mut request = ConduitRequest :: new ( & mut request_info, remote_addr) ;
55
53
handler
56
54
. call ( & mut request)
57
- . map ( good_response )
55
+ . map ( conduit_into_hyper )
58
56
. unwrap_or_else ( |e| server_error_response ( & e. to_string ( ) ) )
59
57
} )
60
58
. await
61
59
. map_err ( Into :: into)
62
60
}
63
61
}
64
62
65
- /// Builds a `hyper::Response` given a `conduit:Response`
66
- fn good_response ( mut response : ConduitResponse ) -> HyperResponse {
67
- let mut body = Vec :: new ( ) ;
68
- if response. body_mut ( ) . write_body ( & mut body) . is_err ( ) {
69
- return server_error_response ( "Error writing body" ) ;
70
- }
71
-
72
- let ( parts, _) = response. into_parts ( ) ;
73
- Response :: from_parts ( parts, body. into ( ) )
74
- }
75
-
76
63
/// Logs an error message and returns a generic status 500 response
77
64
fn server_error_response ( message : & str ) -> HyperResponse {
78
65
error ! ( "Internal Server Error: {}" , message) ;
79
- let body = Body :: from ( "Internal Server Error" ) ;
66
+ let body = hyper :: Body :: from ( "Internal Server Error" ) ;
80
67
Response :: builder ( )
81
- . status ( 500 )
68
+ . status ( StatusCode :: INTERNAL_SERVER_ERROR )
82
69
. body ( body)
83
70
. expect ( "Unexpected invalid header" )
84
71
}
@@ -87,13 +74,13 @@ fn server_error_response(message: &str) -> HyperResponse {
87
74
fn over_capacity_error_response ( ) -> HyperResponse {
88
75
const RETRY_AFTER : u32 = 2 ;
89
76
error ! ( "Server Capacity Exceeded" ) ;
90
- let body = Body :: from ( format ! (
77
+ let body = hyper :: Body :: from ( format ! (
91
78
"Service Unavailable: Please retry after {} seconds." ,
92
79
RETRY_AFTER
93
80
) ) ;
94
81
Response :: builder ( )
95
- . status ( 503 )
96
- . header ( "Retry-After" , RETRY_AFTER )
82
+ . status ( StatusCode :: SERVICE_UNAVAILABLE )
83
+ . header ( header :: RETRY_AFTER , RETRY_AFTER )
97
84
. body ( body)
98
85
. expect ( "Unexpected invalid header" )
99
86
}
0 commit comments