From 19f6f7900f4997c23dfe978c7e903211f98a624c Mon Sep 17 00:00:00 2001 From: David Pedersen Date: Thu, 14 Mar 2024 21:24:32 +0100 Subject: [PATCH] Fix layers being cloned for each request (#2586) --- axum/CHANGELOG.md | 5 ++++- axum/src/routing/method_routing.rs | 2 +- axum/src/routing/mod.rs | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/axum/CHANGELOG.md b/axum/CHANGELOG.md index b3c8d3be..80ce95c3 100644 --- a/axum/CHANGELOG.md +++ b/axum/CHANGELOG.md @@ -7,7 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 # Unreleased -- None. +- **fixed:** Fixed layers being cloned when calling `axum::serve` directly with + a `Router` or `MethodRouter` ([#2586]) + +[#2586]: https://github.com/tokio-rs/axum/pull/2586 # 0.7.4 (13. January, 2024) diff --git a/axum/src/routing/method_routing.rs b/axum/src/routing/method_routing.rs index bb6a1bc9..355dda99 100644 --- a/axum/src/routing/method_routing.rs +++ b/axum/src/routing/method_routing.rs @@ -1239,7 +1239,7 @@ const _: () = { } fn call(&mut self, _req: IncomingStream<'_>) -> Self::Future { - std::future::ready(Ok(self.clone())) + std::future::ready(Ok(self.clone().with_state(()))) } } }; diff --git a/axum/src/routing/mod.rs b/axum/src/routing/mod.rs index fad920a4..6564df7d 100644 --- a/axum/src/routing/mod.rs +++ b/axum/src/routing/mod.rs @@ -492,7 +492,9 @@ const _: () = { } fn call(&mut self, _req: IncomingStream<'_>) -> Self::Future { - std::future::ready(Ok(self.clone())) + // call `Router::with_state` such that everything is turned into `Route` eagerly + // rather than doing that per request + std::future::ready(Ok(self.clone().with_state(()))) } } };