Skip to content

Commit c6275be

Browse files
committed
中间件插入异常修复
1 parent 6667aa9 commit c6275be

File tree

4 files changed

+28
-3
lines changed

4 files changed

+28
-3
lines changed

.DS_Store

0 Bytes
Binary file not shown.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ homepage = "https://github.com/hubertshelley/silent"
99
license = "Apache-2.0"
1010
readme = "./readme.md"
1111
repository = "https://github.com/hubertshelley/silent"
12-
version = "0.7.0"
12+
version = "0.7.1"

examples/.DS_Store

4 KB
Binary file not shown.

silent/src/route/mod.rs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff 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+
}

0 commit comments

Comments
 (0)