diff options
| author | Fuwn <[email protected]> | 2022-03-27 11:13:24 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2022-03-27 11:13:24 +0000 |
| commit | c69f40fc8f4bfe2c6b0bac64966d647fb313a02c (patch) | |
| tree | c95a22a6e2cc76318b539be9acac9e7f0274e962 /src | |
| parent | feat(error_handle): fnmut closure (diff) | |
| download | windmark-c69f40fc8f4bfe2c6b0bac64966d647fb313a02c.tar.xz windmark-c69f40fc8f4bfe2c6b0bac64966d647fb313a02c.zip | |
feat(pre/post_route_callback): fnmut closure
Diffstat (limited to 'src')
| -rw-r--r-- | src/handler.rs | 7 | ||||
| -rw-r--r-- | src/lib.rs | 48 |
2 files changed, 33 insertions, 22 deletions
diff --git a/src/handler.rs b/src/handler.rs index f854aea..b1e6afe 100644 --- a/src/handler.rs +++ b/src/handler.rs @@ -22,6 +22,9 @@ pub type RouteResponse = fn(RouteContext<'_>) -> Response<'_>; pub type ErrorResponse = Box< dyn FnMut(crate::returnable::ErrorContext<'_>) -> Response<'_> + Send + Sync, >; -pub type Callback = - fn(&tokio::net::TcpStream, &url::Url, Option<&matchit::Params<'_, '_>>); +pub type Callback = Box< + dyn FnMut(&tokio::net::TcpStream, &url::Url, Option<&matchit::Params<'_, '_>>) + + Send + + Sync, +>; pub type Partial = fn(RouteContext<'_>) -> String; @@ -123,8 +123,8 @@ pub struct Router { ssl_acceptor: Arc<SslAcceptor>, #[cfg(feature = "logger")] default_logger: bool, - pre_route_callback: Callback, - post_route_callback: Callback, + pre_route_callback: Arc<Mutex<Callback>>, + post_route_callback: Arc<Mutex<Callback>>, charset: String, language: String, } @@ -320,13 +320,17 @@ impl Router { let route = self.routes.at(url.path()); - (self.pre_route_callback)(stream.get_ref(), &url, { - if let Ok(route) = &route { - Some(&route.params) - } else { - None - } - }); + (*self.pre_route_callback).lock().unwrap().call_mut(( + stream.get_ref(), + &url, + { + if let Ok(route) = &route { + Some(&route.params) + } else { + None + } + }, + )); if let Ok(ref route) = route { header = { @@ -403,13 +407,17 @@ impl Router { ) .await?; - (self.post_route_callback)(stream.get_ref(), &url, { - if let Ok(route) = &route { - Some(&route.params) - } else { - None - } - }); + (*self.post_route_callback).lock().unwrap().call_mut(( + stream.get_ref(), + &url, + { + if let Ok(route) = &route { + Some(&route.params) + } else { + None + } + }, + )); stream.shutdown().await?; @@ -522,7 +530,7 @@ impl Router { /// }); /// ``` pub fn set_pre_route_callback(&mut self, callback: Callback) -> &mut Self { - self.pre_route_callback = callback; + self.pre_route_callback = Arc::new(Mutex::new(callback)); self } @@ -542,7 +550,7 @@ impl Router { /// }); /// ``` pub fn set_post_route_callback(&mut self, callback: Callback) -> &mut Self { - self.post_route_callback = callback; + self.post_route_callback = Arc::new(Mutex::new(callback)); self } @@ -623,8 +631,8 @@ impl Default for Router { ), #[cfg(feature = "logger")] default_logger: false, - pre_route_callback: |_, _, _| {}, - post_route_callback: |_, _, _| {}, + pre_route_callback: Arc::new(Mutex::new(Box::new(|_, _, _| {}))), + post_route_callback: Arc::new(Mutex::new(Box::new(|_, _, _| {}))), charset: "utf-8".to_string(), language: "en".to_string(), } |