@@ -16,78 +16,75 @@ async fn echo(req: Request<Body>) -> Result<Response<Body>, hyper::Error> {
16
16
uri = ?req. uri( ) ,
17
17
headers = ?req. headers( )
18
18
) ;
19
- let _enter = span . enter ( ) ;
20
- info ! ( "received request" ) ;
21
- let mut response = Response :: new ( Body :: empty ( ) ) ;
19
+ async move {
20
+ info ! ( "received request" ) ;
21
+ let mut response = Response :: new ( Body :: empty ( ) ) ;
22
22
23
- let ( rsp_span, resp) = match ( req. method ( ) , req. uri ( ) . path ( ) ) {
24
- // Serve some instructions at /
25
- ( & Method :: GET , "/" ) => {
26
- const BODY : & str = "Try POSTing data to /echo" ;
27
- * response. body_mut ( ) = Body :: from ( BODY ) ;
28
- ( span ! ( Level :: INFO , "response" , body = %( & BODY ) ) , response)
29
- }
23
+ match ( req. method ( ) , req. uri ( ) . path ( ) ) {
24
+ // Serve some instructions at /
25
+ ( & Method :: GET , "/" ) => {
26
+ const BODY : & str = "Try POSTing data to /echo" ;
27
+ * response. body_mut ( ) = Body :: from ( BODY ) ;
28
+ info ! ( body = %( & BODY ) , "response" , ) ;
29
+ Ok ( response)
30
+ }
30
31
31
- // Simply echo the body back to the client.
32
- ( & Method :: POST , "/echo" ) => {
33
- let span = span ! ( Level :: INFO , "response" , response_kind = %"echo" ) ;
34
- * response. body_mut ( ) = req. into_body ( ) ;
35
- ( span , response)
36
- }
32
+ // Simply echo the body back to the client.
33
+ ( & Method :: POST , "/echo" ) => {
34
+ info ! ( response_kind = %"echo" , "response ") ;
35
+ * response. body_mut ( ) = req. into_body ( ) ;
36
+ Ok ( response)
37
+ }
37
38
38
- // Convert to uppercase before sending back to client.
39
- ( & Method :: POST , "/echo/uppercase" ) => {
40
- let body = hyper:: body:: to_bytes ( req) . await ?;
41
- let upper = body
42
- . iter ( )
43
- . map ( |byte| byte. to_ascii_uppercase ( ) )
44
- . collect :: < Vec < u8 > > ( ) ;
45
- debug ! (
46
- body = ?str :: from_utf8( & body[ ..] ) ,
47
- uppercased = ?str :: from_utf8( & upper[ ..] ) ,
48
- "uppercased request body"
49
- ) ;
39
+ // Convert to uppercase before sending back to client.
40
+ ( & Method :: POST , "/echo/uppercase" ) => {
41
+ let body = hyper:: body:: to_bytes ( req) . await ?;
42
+ let upper = body
43
+ . iter ( )
44
+ . map ( |byte| byte. to_ascii_uppercase ( ) )
45
+ . collect :: < Vec < u8 > > ( ) ;
46
+ debug ! (
47
+ body = ?str :: from_utf8( & body[ ..] ) ,
48
+ uppercased = ?str :: from_utf8( & upper[ ..] ) ,
49
+ "uppercased request body"
50
+ ) ;
50
51
51
- * response. body_mut ( ) = Body :: from ( upper) ;
52
- (
53
- span ! ( Level :: INFO , "response" , response_kind = %"uppercase" ) ,
54
- response,
55
- )
56
- }
52
+ info ! ( response_kind = %"uppercase" , "response" ) ;
53
+ * response. body_mut ( ) = Body :: from ( upper) ;
54
+ Ok ( response)
55
+ }
57
56
58
- // Reverse the entire body before sending back to the client.
59
- ( & Method :: POST , "/echo/reversed" ) => {
60
- let span = span ! ( Level :: TRACE , "response" , response_kind = % "reversed" ) ;
61
- let _enter = span . enter ( ) ;
62
- let body = hyper :: body:: to_bytes ( req ) . await ? ;
63
- let reversed = body . iter ( ) . rev ( ) . cloned ( ) . collect :: < Vec < u8 > > ( ) ;
64
- debug ! (
65
- body = ? str :: from_utf8 ( & body[ .. ] ) ,
66
- "reversed request body"
67
- ) ;
68
- * response . body_mut ( ) = Body :: from ( reversed ) ;
69
- (
70
- span ! ( Level :: INFO , "reversed" , body = ? ( & response . body ( ) ) ) ,
71
- response,
72
- )
73
- }
57
+ // Reverse the entire body before sending back to the client.
58
+ ( & Method :: POST , "/echo/reversed" ) => {
59
+ async move {
60
+ let body = hyper :: body :: to_bytes ( req ) . await ? ;
61
+ let reversed = body. iter ( ) . rev ( ) . cloned ( ) . collect :: < Vec < u8 > > ( ) ;
62
+ debug ! (
63
+ body = ? str :: from_utf8 ( & body [ .. ] ) ,
64
+ "reversed request body"
65
+ ) ;
66
+ * response . body_mut ( ) = Body :: from ( reversed ) ;
67
+ info ! ( body = ? ( & response . body ( ) ) , "response" ) ;
68
+ Ok ( response )
69
+ }
70
+ . instrument ( span ! ( Level :: TRACE , " response" , response_kind = % "reversed" ) )
71
+ . await
72
+ }
74
73
75
- // The 404 Not Found route...
76
- _ => {
77
- * response. status_mut ( ) = StatusCode :: NOT_FOUND ;
78
- (
79
- span ! (
80
- Level :: TRACE ,
81
- "response" ,
74
+ // The 404 Not Found route...
75
+ _ => {
76
+ * response. status_mut ( ) = StatusCode :: NOT_FOUND ;
77
+ info ! (
82
78
body = ?( ) ,
83
79
status = ?StatusCode :: NOT_FOUND ,
84
- ) ,
85
- response,
86
- )
80
+ "response" ,
81
+ ) ;
82
+ Ok ( response)
83
+ }
87
84
}
88
- } ;
89
- let f = async { resp } . instrument ( rsp_span ) ;
90
- Ok ( f . await )
85
+ }
86
+ . instrument ( span )
87
+ . await
91
88
}
92
89
93
90
#[ tokio:: main]
@@ -107,14 +104,13 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
107
104
108
105
let local_addr: std:: net:: SocketAddr = ( [ 127 , 0 , 0 , 1 ] , 3000 ) . into ( ) ;
109
106
let server_span = span ! ( Level :: TRACE , "server" , %local_addr) ;
110
- let _enter = server_span. enter ( ) ;
111
107
112
108
let service = make_service_fn ( |_| async { Ok :: < _ , hyper:: Error > ( service_fn ( echo) ) } ) ;
113
109
let server = Server :: bind ( & local_addr)
114
110
. serve ( service)
115
111
. instrument ( server_span. clone ( ) ) ;
116
112
117
- info ! ( "listening..." ) ;
113
+ info ! ( parent : & server_span , "listening..." ) ;
118
114
server. await ?;
119
115
120
116
Ok ( ( ) )
0 commit comments