aboutsummaryrefslogtreecommitdiff
path: root/src/router.rs
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-04-06 07:25:24 +0000
committerFuwn <[email protected]>2023-04-06 07:25:24 +0000
commit4444f64ee98f314938a383b4dfdf3cd74fd7e717 (patch)
tree3c4f36a742112e0a0cde337aaa0ffe3fd7096a99 /src/router.rs
parentfeat(cargo): bump 0.3.0 -> 0.3.1 (diff)
downloadwindmark-4444f64ee98f314938a383b4dfdf3cd74fd7e717.tar.xz
windmark-4444f64ee98f314938a383b4dfdf3cd74fd7e717.zip
fix(context): fix async sharing
Diffstat (limited to 'src/router.rs')
-rw-r--r--src/router.rs89
1 files changed, 41 insertions, 48 deletions
diff --git a/src/router.rs b/src/router.rs
index 4b13f8d..b4cd0c7 100644
--- a/src/router.rs
+++ b/src/router.rs
@@ -348,44 +348,45 @@ impl Router {
for module in &mut *self.async_modules.lock().await {
module
.on_pre_route(HookContext::new(
- stream.get_ref(),
- &url,
- route.as_ref().map_or(None, |route| Some(&route.params)),
- &stream.ssl().peer_certificate(),
+ url.clone(),
+ route
+ .as_ref()
+ .map_or(None, |route| Some(route.params.clone())),
+ stream.ssl().peer_certificate().clone(),
))
.await;
}
for module in &mut *self.modules.lock().unwrap() {
module.on_pre_route(HookContext::new(
- stream.get_ref(),
- &url,
- route.as_ref().map_or(None, |route| Some(&route.params)),
- &stream.ssl().peer_certificate(),
+ url.clone(),
+ route
+ .as_ref()
+ .map_or(None, |route| Some(route.params.clone())),
+ stream.ssl().peer_certificate().clone(),
));
}
(*self.pre_route_callback).lock().unwrap()(HookContext::new(
- stream.get_ref(),
- &url,
- route.as_ref().map_or(None, |route| Some(&route.params)),
- &stream.ssl().peer_certificate(),
+ url.clone(),
+ route
+ .as_ref()
+ .map_or(None, |route| Some(route.params.clone())),
+ stream.ssl().peer_certificate(),
));
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(),
+ );
for partial_header in &mut *self.headers.lock().unwrap() {
- header.push_str(&format!(
- "{}\n",
- partial_header(RouteContext::new(
- stream.get_ref(),
- &url,
- &route.params,
- &stream.ssl().peer_certificate()
- )),
- ));
+ header
+ .push_str(&format!("{}\n", partial_header(route_context.clone()),));
}
for (i, partial_footer) in {
@@ -394,12 +395,7 @@ impl Router {
} {
footer.push_str(&format!(
"{}{}",
- partial_footer(RouteContext::new(
- stream.get_ref(),
- &url,
- &route.params,
- &stream.ssl().peer_certificate()
- )),
+ partial_footer(route_context.clone()),
if footers_length > 1 && i != footers_length - 1 {
"\n"
} else {
@@ -409,48 +405,45 @@ impl Router {
}
let mut lock = (*route.value).lock().await;
- let handler = lock.call(RouteContext::new(
- stream.get_ref(),
- &url,
- &route.params,
- &peer_certificate,
- ));
+ let handler = lock.call(route_context);
handler.await
} else {
(*self.error_handler).lock().unwrap()(ErrorContext::new(
- stream.get_ref(),
- &url,
- &peer_certificate,
+ url.clone(),
+ peer_certificate.clone(),
))
};
for module in &mut *self.async_modules.lock().await {
module
.on_post_route(HookContext::new(
- stream.get_ref(),
- &url,
- route.as_ref().map_or(None, |route| Some(&route.params)),
- &stream.ssl().peer_certificate(),
+ url.clone(),
+ route
+ .as_ref()
+ .map_or(None, |route| Some(route.params.clone())),
+ stream.ssl().peer_certificate().clone(),
))
.await;
}
for module in &mut *self.modules.lock().unwrap() {
module.on_post_route(HookContext::new(
- stream.get_ref(),
- &url,
- route.as_ref().map_or(None, |route| Some(&route.params)),
- &stream.ssl().peer_certificate(),
+ url.clone(),
+ route
+ .as_ref()
+ .map_or(None, |route| Some(route.params.clone())),
+ stream.ssl().peer_certificate().clone(),
));
}
(*self.post_route_callback).lock().unwrap()(
HookContext::new(
- stream.get_ref(),
- &url,
- route.as_ref().map_or(None, |route| Some(&route.params)),
- &stream.ssl().peer_certificate(),
+ url.clone(),
+ route
+ .as_ref()
+ .map_or(None, |route| Some(route.params.clone())),
+ stream.ssl().peer_certificate(),
),
&mut content,
);