@@ -6,7 +6,7 @@ use std::collections::hash_map::{Entry, HashMap};
6
6
use std:: error:: Error ;
7
7
use std:: fmt;
8
8
9
- use conduit:: { Handler , Method , Request , Response } ;
9
+ use conduit:: { box_error , Handler , HandlerResult , Method , RequestExt } ;
10
10
use router:: { Match , Router } ;
11
11
12
12
#[ derive( Default ) ]
@@ -53,35 +53,35 @@ impl RouteBuilder {
53
53
}
54
54
55
55
pub fn get < ' a , H : Handler > ( & ' a mut self , pattern : & str , handler : H ) -> & ' a mut RouteBuilder {
56
- self . map ( Method :: Get , pattern, handler)
56
+ self . map ( Method :: GET , pattern, handler)
57
57
}
58
58
59
59
pub fn post < ' a , H : Handler > ( & ' a mut self , pattern : & str , handler : H ) -> & ' a mut RouteBuilder {
60
- self . map ( Method :: Post , pattern, handler)
60
+ self . map ( Method :: POST , pattern, handler)
61
61
}
62
62
63
63
pub fn put < ' a , H : Handler > ( & ' a mut self , pattern : & str , handler : H ) -> & ' a mut RouteBuilder {
64
- self . map ( Method :: Put , pattern, handler)
64
+ self . map ( Method :: PUT , pattern, handler)
65
65
}
66
66
67
67
pub fn delete < ' a , H : Handler > ( & ' a mut self , pattern : & str , handler : H ) -> & ' a mut RouteBuilder {
68
- self . map ( Method :: Delete , pattern, handler)
68
+ self . map ( Method :: DELETE , pattern, handler)
69
69
}
70
70
71
71
pub fn head < ' a , H : Handler > ( & ' a mut self , pattern : & str , handler : H ) -> & ' a mut RouteBuilder {
72
- self . map ( Method :: Head , pattern, handler)
72
+ self . map ( Method :: HEAD , pattern, handler)
73
73
}
74
74
}
75
75
76
76
impl conduit:: Handler for RouteBuilder {
77
- fn call ( & self , request : & mut dyn Request ) -> Result < Response , Box < dyn Error + Send > > {
77
+ fn call ( & self , request : & mut dyn RequestExt ) -> HandlerResult {
78
78
let m = {
79
79
let method = request. method ( ) ;
80
80
let path = request. path ( ) ;
81
81
82
82
match self . recognize ( & method, path) {
83
83
Ok ( m) => m,
84
- Err ( e) => return Err ( Box :: new ( e) as Box < dyn Error + Send > ) ,
84
+ Err ( e) => return Err ( box_error ( e) ) ,
85
85
}
86
86
} ;
87
87
@@ -110,29 +110,29 @@ pub trait RequestParams<'a> {
110
110
fn params ( self ) -> & ' a router:: Params ;
111
111
}
112
112
113
- pub fn params ( req : & dyn Request ) -> & router:: Params {
113
+ pub fn params ( req : & dyn RequestExt ) -> & router:: Params {
114
114
req. extensions ( )
115
115
. find :: < router:: Params > ( )
116
116
. expect ( "Missing params" )
117
117
}
118
118
119
- impl < ' a > RequestParams < ' a > for & ' a ( dyn Request + ' a ) {
119
+ impl < ' a > RequestParams < ' a > for & ' a ( dyn RequestExt + ' a ) {
120
120
fn params ( self ) -> & ' a router:: Params {
121
121
params ( self )
122
122
}
123
123
}
124
124
125
125
#[ cfg( test) ]
126
126
mod tests {
127
- extern crate semver;
128
- use std:: collections:: HashMap ;
129
127
use std:: io;
130
128
use std:: net:: SocketAddr ;
131
129
132
130
use { RequestParams , RouteBuilder } ;
133
131
134
- use conduit;
135
- use conduit:: { Extensions , Handler , Headers , Host , Method , Scheme , TypeMap } ;
132
+ use conduit:: {
133
+ vec_to_body, Extensions , Handler , HeaderMap , Host , Method , Response , Scheme , StatusCode ,
134
+ TypeMap , Version ,
135
+ } ;
136
136
137
137
struct RequestSentinel {
138
138
method : Method ,
@@ -150,15 +150,12 @@ mod tests {
150
150
}
151
151
}
152
152
153
- impl conduit:: Request for RequestSentinel {
154
- fn http_version ( & self ) -> semver :: Version {
153
+ impl conduit:: RequestExt for RequestSentinel {
154
+ fn http_version ( & self ) -> Version {
155
155
unimplemented ! ( )
156
156
}
157
- fn conduit_version ( & self ) -> semver:: Version {
158
- unimplemented ! ( )
159
- }
160
- fn method ( & self ) -> Method {
161
- self . method . clone ( )
157
+ fn method ( & self ) -> & Method {
158
+ & self . method
162
159
}
163
160
fn scheme ( & self ) -> Scheme {
164
161
unimplemented ! ( )
@@ -181,7 +178,7 @@ mod tests {
181
178
fn content_length ( & self ) -> Option < u64 > {
182
179
unimplemented ! ( )
183
180
}
184
- fn headers < ' a > ( & ' a self ) -> & ' a dyn Headers {
181
+ fn headers < ' a > ( & ' a self ) -> & HeaderMap {
185
182
unimplemented ! ( )
186
183
}
187
184
fn body < ' a > ( & ' a mut self ) -> & ' a mut dyn io:: Read {
@@ -198,31 +195,31 @@ mod tests {
198
195
#[ test]
199
196
fn basic_get ( ) {
200
197
let router = test_router ( ) ;
201
- let mut req = RequestSentinel :: new ( Method :: Get , "/posts/1" ) ;
198
+ let mut req = RequestSentinel :: new ( Method :: GET , "/posts/1" ) ;
202
199
let mut res = router. call ( & mut req) . ok ( ) . expect ( "No response" ) ;
203
200
204
- assert_eq ! ( res. status, ( 200 , "OK" ) ) ;
201
+ assert_eq ! ( res. status( ) , StatusCode :: OK ) ;
205
202
let mut s = Vec :: new ( ) ;
206
- res. body . write_body ( & mut s) . unwrap ( ) ;
207
- assert_eq ! ( s, b"1, Get " ) ;
203
+ res. body_mut ( ) . write_body ( & mut s) . unwrap ( ) ;
204
+ assert_eq ! ( s, b"1, GET " ) ;
208
205
}
209
206
210
207
#[ test]
211
208
fn basic_post ( ) {
212
209
let router = test_router ( ) ;
213
- let mut req = RequestSentinel :: new ( Method :: Post , "/posts/10" ) ;
210
+ let mut req = RequestSentinel :: new ( Method :: POST , "/posts/10" ) ;
214
211
let mut res = router. call ( & mut req) . ok ( ) . expect ( "No response" ) ;
215
212
216
- assert_eq ! ( res. status, ( 200 , "OK" ) ) ;
213
+ assert_eq ! ( res. status( ) , StatusCode :: OK ) ;
217
214
let mut s = Vec :: new ( ) ;
218
- res. body . write_body ( & mut s) . unwrap ( ) ;
219
- assert_eq ! ( s, b"10, Post " ) ;
215
+ res. body_mut ( ) . write_body ( & mut s) . unwrap ( ) ;
216
+ assert_eq ! ( s, b"10, POST " ) ;
220
217
}
221
218
222
219
#[ test]
223
220
fn nonexistent_route ( ) {
224
221
let router = test_router ( ) ;
225
- let mut req = RequestSentinel :: new ( Method :: Post , "/nonexistent" ) ;
222
+ let mut req = RequestSentinel :: new ( Method :: POST , "/nonexistent" ) ;
226
223
router. call ( & mut req) . err ( ) . expect ( "No response" ) ;
227
224
}
228
225
@@ -233,15 +230,12 @@ mod tests {
233
230
router
234
231
}
235
232
236
- fn test_handler ( req : & mut dyn conduit:: Request ) -> io :: Result < conduit:: Response > {
233
+ fn test_handler ( req : & mut dyn conduit:: RequestExt ) -> conduit:: HttpResult {
237
234
let mut res = vec ! [ ] ;
238
235
res. push ( req. params ( ) [ "id" ] . clone ( ) ) ;
239
236
res. push ( format ! ( "{:?}" , req. method( ) ) ) ;
240
237
241
- Ok ( conduit:: Response {
242
- status : ( 200 , "OK" ) ,
243
- headers : HashMap :: new ( ) ,
244
- body : Box :: new ( io:: Cursor :: new ( res. join ( ", " ) . into_bytes ( ) ) ) ,
245
- } )
238
+ let bytes = res. join ( ", " ) . into_bytes ( ) ;
239
+ Response :: builder ( ) . body ( vec_to_body ( bytes) )
246
240
}
247
241
}
0 commit comments