@@ -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,
@@ -65,7 +60,6 @@ impl<Data: Clone + Send + Sync + 'static> Router<Data> {
65
60
Router {
66
61
table : PathTable :: new ( ) ,
67
62
middleware_base : Vec :: new ( ) ,
68
- default_handler : Arc :: new ( BoxedEndpoint :: new ( base_default_handler) ) ,
69
63
}
70
64
}
71
65
@@ -75,7 +69,6 @@ impl<Data: Clone + Send + Sync + 'static> Router<Data> {
75
69
Resource {
76
70
table,
77
71
middleware_base : & self . middleware_base ,
78
- default_handler : & self . default_handler ,
79
72
}
80
73
}
81
74
@@ -116,26 +109,17 @@ impl<Data: Clone + Send + Sync + 'static> Router<Data> {
116
109
self
117
110
}
118
111
119
- pub fn set_default_handler < T : Endpoint < Data , U > , U > ( & mut self , ep : T ) -> & mut Self {
120
- self . default_handler = Arc :: new ( BoxedEndpoint :: new ( ep) ) ;
121
- self
122
- }
123
-
124
112
pub ( crate ) fn route < ' a > (
125
113
& ' a self ,
126
114
path : & ' a str ,
127
115
method : & http:: Method ,
116
+ default_handler : & ' a Arc < BoxedEndpoint < Data > > ,
128
117
) -> RouteResult < ' a , Data > {
129
118
match self . table . route ( path) {
130
119
Some ( ( route, route_match) ) => route_match_success ( route, route_match, method)
131
- . or_else ( || {
132
- Some ( route_match_failure (
133
- & self . default_handler ,
134
- & self . middleware_base ,
135
- ) )
136
- } )
120
+ . or_else ( || Some ( route_match_failure ( default_handler, & self . middleware_base ) ) )
137
121
. unwrap ( ) ,
138
- None => route_match_failure ( & self . default_handler , & self . middleware_base ) ,
122
+ None => route_match_failure ( default_handler, & self . middleware_base ) ,
139
123
}
140
124
}
141
125
}
@@ -148,7 +132,6 @@ impl<Data: Clone + Send + Sync + 'static> Router<Data> {
148
132
pub struct Resource < ' a , Data > {
149
133
table : & ' a mut PathTable < ResourceData < Data > > ,
150
134
middleware_base : & ' a Vec < Arc < dyn Middleware < Data > + Send + Sync > > ,
151
- default_handler : & ' a Arc < BoxedEndpoint < Data > > ,
152
135
}
153
136
154
137
struct ResourceData < Data > {
@@ -168,7 +151,6 @@ impl<'a, Data> Resource<'a, Data> {
168
151
let mut subrouter = Router {
169
152
table : PathTable :: new ( ) ,
170
153
middleware_base : self . middleware_base . clone ( ) ,
171
- default_handler : self . default_handler . clone ( ) ,
172
154
} ;
173
155
builder ( & mut subrouter) ;
174
156
* self . table = subrouter. table ;
@@ -257,11 +239,14 @@ mod tests {
257
239
path : & ' a str ,
258
240
method : & ' a http:: Method ,
259
241
) -> Option < Response > {
242
+ let default_handler = Arc :: new ( BoxedEndpoint :: new ( async || {
243
+ http:: status:: StatusCode :: NOT_FOUND
244
+ } ) ) ;
260
245
let RouteResult {
261
246
endpoint,
262
247
params,
263
248
middleware,
264
- } = router. route ( path, method) ;
249
+ } = router. route ( path, method, & default_handler ) ;
265
250
266
251
let data = Data :: default ( ) ;
267
252
let req = http:: Request :: builder ( )
@@ -285,7 +270,10 @@ mod tests {
285
270
path : & str ,
286
271
method : & http:: Method ,
287
272
) -> Option < usize > {
288
- let route_result = router. route ( path, method) ;
273
+ let default_handler = Arc :: new ( BoxedEndpoint :: new ( async || {
274
+ http:: status:: StatusCode :: NOT_FOUND
275
+ } ) ) ;
276
+ let route_result = router. route ( path, method, & default_handler) ;
289
277
Some ( route_result. middleware . len ( ) )
290
278
}
291
279
0 commit comments