diff options
| author | Fuwn <[email protected]> | 2023-04-06 07:31:09 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-04-06 07:31:09 +0000 |
| commit | 71bbd199aa67811c9d7a15dbf1b66c5e43b76d29 (patch) | |
| tree | 2f3c086455ebe37f187f1ccbc8262c1811ae6ad2 /src | |
| parent | fix(context): fix async sharing (diff) | |
| download | windmark-71bbd199aa67811c9d7a15dbf1b66c5e43b76d29.tar.xz windmark-71bbd199aa67811c9d7a15dbf1b66c5e43b76d29.zip | |
refactor(router): simplify context creation
Diffstat (limited to 'src')
| -rw-r--r-- | src/context/error.rs | 1 | ||||
| -rw-r--r-- | src/context/hook.rs | 1 | ||||
| -rw-r--r-- | src/router.rs | 70 |
3 files changed, 19 insertions, 53 deletions
diff --git a/src/context/error.rs b/src/context/error.rs index a9a4b85..7e02b1a 100644 --- a/src/context/error.rs +++ b/src/context/error.rs @@ -20,6 +20,7 @@ use openssl::x509::X509; use url::Url; #[allow(clippy::module_name_repetitions)] +#[derive(Clone)] pub struct ErrorContext { pub url: Url, pub certificate: Option<X509>, diff --git a/src/context/hook.rs b/src/context/hook.rs index 736696f..94a6908 100644 --- a/src/context/hook.rs +++ b/src/context/hook.rs @@ -21,6 +21,7 @@ use openssl::x509::X509; use url::Url; #[allow(clippy::module_name_repetitions)] +#[derive(Clone)] pub struct HookContext<'a> { pub url: Url, pub params: Option<Params<'a, 'a>>, diff --git a/src/router.rs b/src/router.rs index b4cd0c7..5b674a5 100644 --- a/src/router.rs +++ b/src/router.rs @@ -344,45 +344,29 @@ impl Router { url.path().to_string() }; let route = &mut self.routes.at(&fixed_path); + let peer_certificate = stream.ssl().peer_certificate(); + let hook_context = HookContext::new( + url.clone(), + route + .as_ref() + .map_or(None, |route| Some(route.params.clone())), + peer_certificate.clone(), + ); for module in &mut *self.async_modules.lock().await { - module - .on_pre_route(HookContext::new( - url.clone(), - route - .as_ref() - .map_or(None, |route| Some(route.params.clone())), - stream.ssl().peer_certificate().clone(), - )) - .await; + module.on_pre_route(hook_context.clone()).await; } for module in &mut *self.modules.lock().unwrap() { - module.on_pre_route(HookContext::new( - url.clone(), - route - .as_ref() - .map_or(None, |route| Some(route.params.clone())), - stream.ssl().peer_certificate().clone(), - )); + module.on_pre_route(hook_context.clone()); } - (*self.pre_route_callback).lock().unwrap()(HookContext::new( - url.clone(), - route - .as_ref() - .map_or(None, |route| Some(route.params.clone())), - stream.ssl().peer_certificate(), - )); + (*self.pre_route_callback).lock().unwrap()(hook_context.clone()); - let peer_certificate = stream.ssl().peer_certificate(); let mut content = if let Ok(ref route) = route { let footers_length = (*self.footers.lock().unwrap()).len(); - let route_context = RouteContext::new( - url.clone(), - route.params.clone(), - stream.ssl().peer_certificate(), - ); + let route_context = + RouteContext::new(url.clone(), route.params.clone(), peer_certificate); for partial_header in &mut *self.headers.lock().unwrap() { header @@ -411,40 +395,20 @@ impl Router { } else { (*self.error_handler).lock().unwrap()(ErrorContext::new( url.clone(), - peer_certificate.clone(), + peer_certificate, )) }; for module in &mut *self.async_modules.lock().await { - module - .on_post_route(HookContext::new( - url.clone(), - route - .as_ref() - .map_or(None, |route| Some(route.params.clone())), - stream.ssl().peer_certificate().clone(), - )) - .await; + module.on_post_route(hook_context.clone()).await; } for module in &mut *self.modules.lock().unwrap() { - module.on_post_route(HookContext::new( - url.clone(), - route - .as_ref() - .map_or(None, |route| Some(route.params.clone())), - stream.ssl().peer_certificate().clone(), - )); + module.on_post_route(hook_context.clone()); } (*self.post_route_callback).lock().unwrap()( - HookContext::new( - url.clone(), - route - .as_ref() - .map_or(None, |route| Some(route.params.clone())), - stream.ssl().peer_certificate(), - ), + hook_context.clone(), &mut content, ); |