Avoid cloning the uri/path

This commit is contained in:
novacrazy 2024-10-10 10:36:22 +02:00 committed by Yann Simon
parent 9feb526c03
commit 1e118ccca9

View file

@ -367,9 +367,9 @@ where
} }
} }
let path = req.uri().path().to_owned(); let (mut parts, body) = req.into_parts();
match self.node.at(&path) { match self.node.at(parts.uri.path()) {
Ok(match_) => { Ok(match_) => {
let id = *match_.value; let id = *match_.value;
@ -378,17 +378,18 @@ where
crate::extract::matched_path::set_matched_path_for_request( crate::extract::matched_path::set_matched_path_for_request(
id, id,
&self.node.route_id_to_path, &self.node.route_id_to_path,
req.extensions_mut(), &mut parts.extensions,
); );
} }
url_params::insert_url_params(req.extensions_mut(), match_.params); url_params::insert_url_params(&mut parts.extensions, match_.params);
let endpoint = self let endpoint = self
.routes .routes
.get(&id) .get(&id)
.expect("no route for id. This is a bug in axum. Please file an issue"); .expect("no route for id. This is a bug in axum. Please file an issue");
let req = Request::from_parts(parts, body);
match endpoint { match endpoint {
Endpoint::MethodRouter(method_router) => { Endpoint::MethodRouter(method_router) => {
Ok(method_router.call_with_state(req, state)) Ok(method_router.call_with_state(req, state))
@ -398,7 +399,7 @@ where
} }
// explicitly handle all variants in case matchit adds // explicitly handle all variants in case matchit adds
// new ones we need to handle differently // new ones we need to handle differently
Err(MatchError::NotFound) => Err((req, state)), Err(MatchError::NotFound) => Err((Request::from_parts(parts, body), state)),
} }
} }