diff options
| author | Fuwn <[email protected]> | 2023-04-06 07:25:24 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-04-06 07:25:24 +0000 |
| commit | 4444f64ee98f314938a383b4dfdf3cd74fd7e717 (patch) | |
| tree | 3c4f36a742112e0a0cde337aaa0ffe3fd7096a99 /src/router.rs | |
| parent | feat(cargo): bump 0.3.0 -> 0.3.1 (diff) | |
| download | windmark-4444f64ee98f314938a383b4dfdf3cd74fd7e717.tar.xz windmark-4444f64ee98f314938a383b4dfdf3cd74fd7e717.zip | |
fix(context): fix async sharing
Diffstat (limited to 'src/router.rs')
| -rw-r--r-- | src/router.rs | 89 |
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, ); |