diff --git a/axum/src/routing/mod.rs b/axum/src/routing/mod.rs index 822be773..61e7e0f6 100644 --- a/axum/src/routing/mod.rs +++ b/axum/src/routing/mod.rs @@ -656,14 +656,14 @@ where } } - fn call_with_state(&mut self, req: Request, state: S) -> RouteFuture { + fn call_with_state(self, req: Request, state: S) -> RouteFuture { match self { Fallback::Default(route) | Fallback::Service(route) => { - RouteFuture::from_future(route.oneshot_inner(req)) + RouteFuture::from_future(route.oneshot_inner_owned(req)) } Fallback::BoxedHandler(handler) => { - let mut route = handler.clone().into_route(state); - RouteFuture::from_future(route.oneshot_inner(req)) + let route = handler.clone().into_route(state); + RouteFuture::from_future(route.oneshot_inner_owned(req)) } } } diff --git a/axum/src/routing/tests/fallback.rs b/axum/src/routing/tests/fallback.rs index 4ff55ae4..02850b19 100644 --- a/axum/src/routing/tests/fallback.rs +++ b/axum/src/routing/tests/fallback.rs @@ -344,5 +344,5 @@ async fn state_isnt_cloned_too_much_with_fallback() { client.get("/does-not-exist").await; - assert_eq!(state.count(), 4); + assert_eq!(state.count(), 3); }