aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-04-06 07:31:09 +0000
committerFuwn <[email protected]>2023-04-06 07:31:09 +0000
commit71bbd199aa67811c9d7a15dbf1b66c5e43b76d29 (patch)
tree2f3c086455ebe37f187f1ccbc8262c1811ae6ad2 /src
parentfix(context): fix async sharing (diff)
downloadwindmark-71bbd199aa67811c9d7a15dbf1b66c5e43b76d29.tar.xz
windmark-71bbd199aa67811c9d7a15dbf1b66c5e43b76d29.zip
refactor(router): simplify context creation
Diffstat (limited to 'src')
-rw-r--r--src/context/error.rs1
-rw-r--r--src/context/hook.rs1
-rw-r--r--src/router.rs70
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,
);