@@ -13,7 +13,6 @@ use path_table::{PathTable, RouteMatch};
13
13
pub struct Router < Data > {
14
14
table : PathTable < ResourceData < Data > > ,
15
15
middleware_base : Vec < Arc < dyn Middleware < Data > + Send + Sync > > ,
16
- default_handler : Arc < BoxedEndpoint < Data > > ,
17
16
}
18
17
19
18
pub ( crate ) struct RouteResult < ' a , Data > {
@@ -22,10 +21,6 @@ pub(crate) struct RouteResult<'a, Data> {
22
21
pub ( crate ) middleware : & ' a [ Arc < dyn Middleware < Data > + Send + Sync > ] ,
23
22
}
24
23
25
- pub async fn base_default_handler ( ) -> http:: status:: StatusCode {
26
- http:: status:: StatusCode :: NOT_FOUND
27
- }
28
-
29
24
fn route_match_success < ' a , Data > (
30
25
route : & ' a ResourceData < Data > ,
31
26
route_match : RouteMatch < ' a > ,
@@ -50,7 +45,7 @@ fn route_match_success<'a, Data>(
50
45
51
46
fn route_match_failure < ' a , Data > (
52
47
endpoint : & ' a BoxedEndpoint < Data > ,
53
- middleware : & ' a Vec < Arc < dyn Middleware < Data > + Send + Sync > > ,
48
+ middleware : & ' a [ Arc < dyn Middleware < Data > + Send + Sync > ] ,
54
49
) -> RouteResult < ' a , Data > {
55
50
RouteResult {
56
51
endpoint,
@@ -99,7 +94,6 @@ impl<Data: Clone + Send + Sync + 'static> Router<Data> {
99
94
Resource {
100
95
table,
101
96
middleware_base : & self . middleware_base ,
102
- default_handler : & self . default_handler ,
103
97
}
104
98
}
105
99
@@ -148,26 +142,17 @@ impl<Data: Clone + Send + Sync + 'static> Router<Data> {
148
142
self
149
143
}
150
144
151
- pub fn set_default_handler < T : Endpoint < Data , U > , U > ( & mut self , ep : T ) -> & mut Self {
152
- self . default_handler = Arc :: new ( BoxedEndpoint :: new ( ep) ) ;
153
- self
154
- }
155
-
156
145
pub ( crate ) fn route < ' a > (
157
146
& ' a self ,
158
147
path : & ' a str ,
159
148
method : & http:: Method ,
149
+ default_handler : & ' a Arc < BoxedEndpoint < Data > > ,
160
150
) -> RouteResult < ' a , Data > {
161
151
match self . table . route ( path) {
162
152
Some ( ( route, route_match) ) => route_match_success ( route, route_match, method)
163
- . or_else ( || {
164
- Some ( route_match_failure (
165
- & self . default_handler ,
166
- & self . middleware_base ,
167
- ) )
168
- } )
153
+ . or_else ( || Some ( route_match_failure ( default_handler, & self . middleware_base ) ) )
169
154
. unwrap ( ) ,
170
- None => route_match_failure ( & self . default_handler , & self . middleware_base ) ,
155
+ None => route_match_failure ( default_handler, & self . middleware_base ) ,
171
156
}
172
157
}
173
158
}
@@ -180,7 +165,6 @@ impl<Data: Clone + Send + Sync + 'static> Router<Data> {
180
165
pub struct Resource < ' a , Data > {
181
166
table : & ' a mut PathTable < ResourceData < Data > > ,
182
167
middleware_base : & ' a Vec < Arc < dyn Middleware < Data > + Send + Sync > > ,
183
- default_handler : & ' a Arc < BoxedEndpoint < Data > > ,
184
168
}
185
169
186
170
struct ResourceData < Data > {
@@ -200,7 +184,6 @@ impl<'a, Data> Resource<'a, Data> {
200
184
let mut subrouter = Router {
201
185
table : PathTable :: new ( ) ,
202
186
middleware_base : self . middleware_base . clone ( ) ,
203
- default_handler : self . default_handler . clone ( ) ,
204
187
} ;
205
188
builder ( & mut subrouter) ;
206
189
* self . table = subrouter. table ;
@@ -289,11 +272,14 @@ mod tests {
289
272
path : & ' a str ,
290
273
method : & ' a http:: Method ,
291
274
) -> Option < Response > {
275
+ let default_handler = Arc :: new ( BoxedEndpoint :: new ( async || {
276
+ http:: status:: StatusCode :: NOT_FOUND
277
+ } ) ) ;
292
278
let RouteResult {
293
279
endpoint,
294
280
params,
295
281
middleware,
296
- } = router. route ( path, method) ;
282
+ } = router. route ( path, method, & default_handler ) ;
297
283
298
284
let data = Data :: default ( ) ;
299
285
let req = http:: Request :: builder ( )
@@ -317,7 +303,10 @@ mod tests {
317
303
path : & str ,
318
304
method : & http:: Method ,
319
305
) -> Option < usize > {
320
- let route_result = router. route ( path, method) ;
306
+ let default_handler = Arc :: new ( BoxedEndpoint :: new ( async || {
307
+ http:: status:: StatusCode :: NOT_FOUND
308
+ } ) ) ;
309
+ let route_result = router. route ( path, method, & default_handler) ;
321
310
Some ( route_result. middleware . len ( ) )
322
311
}
323
312
0 commit comments