mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-23 00:00:15 +02:00
Fix compile time regression by boxing routes internally (#404)
This is a reimplementation of #401 but with the new matchit based router. Fixes #399
This commit is contained in:
+9
-7
@@ -25,8 +25,8 @@ use std::{
|
||||
task::{Context, Poll},
|
||||
time::Duration,
|
||||
};
|
||||
use tower::service_fn;
|
||||
use tower::timeout::TimeoutLayer;
|
||||
use tower::{service_fn, ServiceBuilder};
|
||||
use tower_service::Service;
|
||||
|
||||
pub(crate) use helpers::*;
|
||||
@@ -251,8 +251,7 @@ async fn boxing() {
|
||||
"hi from POST"
|
||||
}),
|
||||
)
|
||||
.layer(tower_http::compression::CompressionLayer::new())
|
||||
.boxed();
|
||||
.layer(tower_http::compression::CompressionLayer::new());
|
||||
|
||||
let client = TestClient::new(app);
|
||||
|
||||
@@ -532,10 +531,13 @@ async fn wildcard_sees_whole_url() {
|
||||
async fn middleware_applies_to_routes_above() {
|
||||
let app = Router::new()
|
||||
.route("/one", get(std::future::pending::<()>))
|
||||
.layer(TimeoutLayer::new(Duration::new(0, 0)))
|
||||
.layer(HandleErrorLayer::new(|_: BoxError| {
|
||||
StatusCode::REQUEST_TIMEOUT
|
||||
}))
|
||||
.layer(
|
||||
ServiceBuilder::new()
|
||||
.layer(HandleErrorLayer::new(|_: BoxError| {
|
||||
StatusCode::REQUEST_TIMEOUT
|
||||
}))
|
||||
.layer(TimeoutLayer::new(Duration::new(0, 0))),
|
||||
)
|
||||
.route("/two", get(|| async {}));
|
||||
|
||||
let client = TestClient::new(app);
|
||||
|
||||
+1
-2
@@ -1,7 +1,6 @@
|
||||
use super::*;
|
||||
use crate::body::box_body;
|
||||
use crate::error_handling::HandleErrorExt;
|
||||
use crate::routing::EmptyRouter;
|
||||
use std::collections::HashMap;
|
||||
|
||||
#[tokio::test]
|
||||
@@ -256,5 +255,5 @@ async fn multiple_top_level_nests() {
|
||||
#[tokio::test]
|
||||
#[should_panic(expected = "Invalid route: nested routes cannot contain wildcards (*)")]
|
||||
async fn nest_cannot_contain_wildcards() {
|
||||
Router::<EmptyRouter>::new().nest::<_, Body>("/one/*rest", Router::<EmptyRouter>::new());
|
||||
Router::<Body>::new().nest("/one/*rest", Router::new());
|
||||
}
|
||||
|
||||
+7
-4
@@ -135,8 +135,11 @@ async fn layer_and_handle_error() {
|
||||
let one = Router::new().route("/foo", get(|| async {}));
|
||||
let two = Router::new()
|
||||
.route("/timeout", get(futures::future::pending::<()>))
|
||||
.layer(TimeoutLayer::new(Duration::from_millis(10)))
|
||||
.layer(HandleErrorLayer::new(|_| StatusCode::REQUEST_TIMEOUT));
|
||||
.layer(
|
||||
ServiceBuilder::new()
|
||||
.layer(HandleErrorLayer::new(|_| StatusCode::REQUEST_TIMEOUT))
|
||||
.layer(TimeoutLayer::new(Duration::from_millis(10))),
|
||||
);
|
||||
let app = one.or(two);
|
||||
|
||||
let client = TestClient::new(app);
|
||||
@@ -159,8 +162,8 @@ async fn nesting() {
|
||||
|
||||
#[tokio::test]
|
||||
async fn boxed() {
|
||||
let one = Router::new().route("/foo", get(|| async {})).boxed();
|
||||
let two = Router::new().route("/bar", get(|| async {})).boxed();
|
||||
let one = Router::new().route("/foo", get(|| async {}));
|
||||
let two = Router::new().route("/bar", get(|| async {}));
|
||||
let app = one.or(two);
|
||||
|
||||
let client = TestClient::new(app);
|
||||
|
||||
Reference in New Issue
Block a user