@@ -15,16 +15,6 @@ pub struct RouteBuilder {
15
15
routers : HashMap < Method , Router < Box < Handler + Send + Share > > >
16
16
}
17
17
18
- macro_rules! method_map(
19
- ( $method: ident => $variant: ty) => (
20
- pub fn $method<' a, H : Handler >( & ' a mut self , pattern: & str , handler: H )
21
- -> & ' a mut RouteBuilder
22
- {
23
- self . map( conduit:: $variant, pattern, handler)
24
- }
25
- )
26
- )
27
-
28
18
impl RouteBuilder {
29
19
pub fn new ( ) -> RouteBuilder {
30
20
RouteBuilder { routers : HashMap :: new ( ) }
@@ -54,26 +44,22 @@ impl RouteBuilder {
54
44
}
55
45
56
46
pub fn post < ' a , H : Handler > ( & ' a mut self , pattern : & str , handler : H )
57
- -> & ' a mut RouteBuilder
58
- {
47
+ -> & ' a mut RouteBuilder {
59
48
self . map ( conduit:: Post , pattern, handler)
60
49
}
61
50
62
51
pub fn put < ' a , H : Handler > ( & ' a mut self , pattern : & str , handler : H )
63
- -> & ' a mut RouteBuilder
64
- {
52
+ -> & ' a mut RouteBuilder {
65
53
self . map ( conduit:: Put , pattern, handler)
66
54
}
67
55
68
56
pub fn delete < ' a , H : Handler > ( & ' a mut self , pattern : & str , handler : H )
69
- -> & ' a mut RouteBuilder
70
- {
57
+ -> & ' a mut RouteBuilder {
71
58
self . map ( conduit:: Delete , pattern, handler)
72
59
}
73
60
74
61
pub fn head < ' a , H : Handler > ( & ' a mut self , pattern : & str , handler : H )
75
- -> & ' a mut RouteBuilder
76
- {
62
+ -> & ' a mut RouteBuilder {
77
63
self . map ( conduit:: Head , pattern, handler)
78
64
}
79
65
}
@@ -115,8 +101,6 @@ impl<'a> RequestParams<'a> for &'a mut Request {
115
101
}
116
102
}
117
103
118
- //impl<T: Request> RequestParams for T {}
119
-
120
104
#[ cfg( test) ]
121
105
mod tests {
122
106
extern crate semver;
@@ -168,28 +152,40 @@ mod tests {
168
152
}
169
153
170
154
#[ test]
171
- fn as_conduit_handler ( ) {
172
- let mut router = RouteBuilder :: new ( ) ;
173
- router. post ( "/posts/:id" , handler1) ;
174
- router. get ( "/posts/:id" , handler1) ;
175
-
155
+ fn basic_get ( ) {
156
+ let router = test_router ( ) ;
176
157
let mut req = RequestSentinel :: new ( conduit:: Get , "/posts/1" ) ;
177
158
let mut res = router. call ( & mut req) . ok ( ) . expect ( "No response" ) ;
178
159
179
160
assert_eq ! ( res. status, ( 200 , "OK" ) ) ;
180
161
assert_eq ! ( res. body. read_to_str( ) . unwrap( ) , "1, Get" . to_str( ) ) ;
162
+ }
181
163
164
+ #[ test]
165
+ fn basic_post ( ) {
166
+ let router = test_router ( ) ;
182
167
let mut req = RequestSentinel :: new ( conduit:: Post , "/posts/10" ) ;
183
168
let mut res = router. call ( & mut req) . ok ( ) . expect ( "No response" ) ;
184
169
185
170
assert_eq ! ( res. status, ( 200 , "OK" ) ) ;
186
171
assert_eq ! ( res. body. read_to_str( ) . unwrap( ) , "10, Post" . to_str( ) ) ;
172
+ }
187
173
174
+ #[ test]
175
+ fn nonexistent_route ( ) {
176
+ let router = test_router ( ) ;
188
177
let mut req = RequestSentinel :: new ( conduit:: Post , "/nonexistent" ) ;
189
178
router. call ( & mut req) . err ( ) . expect ( "No response" ) ;
190
179
}
191
180
192
- fn handler1 ( req : & mut conduit:: Request ) -> Result < conduit:: Response , ( ) > {
181
+ fn test_router ( ) -> RouteBuilder {
182
+ let mut router = RouteBuilder :: new ( ) ;
183
+ router. post ( "/posts/:id" , test_handler) ;
184
+ router. get ( "/posts/:id" , test_handler) ;
185
+ router
186
+ }
187
+
188
+ fn test_handler ( req : & mut conduit:: Request ) -> Result < conduit:: Response , ( ) > {
193
189
let mut res = vec ! ( ) ;
194
190
res. push ( req. params ( ) [ "id" ] ) ;
195
191
res. push ( format ! ( "{}" , req. method( ) ) ) ;
0 commit comments