File tree Expand file tree Collapse file tree 4 files changed +28
-3
lines changed Expand file tree Collapse file tree 4 files changed +28
-3
lines changed Original file line number Diff line number Diff line change @@ -9,4 +9,4 @@ homepage = "https://github.com/hubertshelley/silent"
99license = " Apache-2.0"
1010readme = " ./readme.md"
1111repository = " https://github.com/hubertshelley/silent"
12- version = " 0.7.0 "
12+ version = " 0.7.1 "
Original file line number Diff line number Diff line change @@ -69,14 +69,23 @@ impl Route {
6969 }
7070 }
7171 pub fn append ( mut self , mut route : Route ) -> Self {
72- route. middlewares . append ( & mut self . middlewares . clone ( ) ) ;
72+ self . middlewares
73+ . iter ( )
74+ . cloned ( )
75+ . for_each ( |m| route. middleware_hook ( m. clone ( ) ) ) ;
7376 self . children . push ( route) ;
7477 self
7578 }
7679 pub fn hook ( mut self , handler : impl MiddleWareHandler + ' static ) -> Self {
77- self . middlewares . push ( Arc :: new ( handler) ) ;
80+ self . middleware_hook ( Arc :: new ( handler) ) ;
7881 self
7982 }
83+ fn middleware_hook ( & mut self , handler : Arc < dyn MiddleWareHandler > ) {
84+ self . middlewares . push ( handler. clone ( ) ) ;
85+ self . children
86+ . iter_mut ( )
87+ . for_each ( |r| r. middleware_hook ( handler. clone ( ) ) ) ;
88+ }
8089}
8190
8291#[ derive( Clone , Default ) ]
@@ -191,3 +200,19 @@ impl Routes {
191200 }
192201 }
193202}
203+
204+ #[ cfg( test) ]
205+ mod tests {
206+ use super :: * ;
207+
208+ struct MiddlewareTest ;
209+
210+ impl MiddleWareHandler for MiddlewareTest { }
211+ #[ test]
212+ fn middleware_tree_test ( ) {
213+ let route = Route :: new ( "api" )
214+ . hook ( MiddlewareTest { } )
215+ . append ( Route :: new ( "test" ) ) ;
216+ assert_eq ! ( route. children[ 0 ] . middlewares. len( ) , 1 )
217+ }
218+ }
You can’t perform that action at this time.
0 commit comments