mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-23 00:00:15 +02:00
Replace route with Router::new().route() (#215)
This way there is now only one way to create a router:
```rust
use axum::{Router, handler::get};
let app = Router::new()
.route("/foo", get(handler))
.route("/foo", get(handler));
```
`nest` was changed in the same way:
```rust
use axum::Router;
let app = Router::new().nest("/foo", service);
```
This commit is contained in:
@@ -131,7 +131,7 @@ where
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::Server;
|
||||
use crate::{handler::get, route};
|
||||
use crate::{handler::get, Router};
|
||||
use std::net::{SocketAddr, TcpListener};
|
||||
|
||||
#[tokio::test]
|
||||
@@ -145,7 +145,7 @@ mod tests {
|
||||
|
||||
let (tx, rx) = tokio::sync::oneshot::channel();
|
||||
tokio::spawn(async move {
|
||||
let app = route("/", get(handler));
|
||||
let app = Router::new().route("/", get(handler));
|
||||
let server = Server::from_tcp(listener)
|
||||
.unwrap()
|
||||
.serve(app.into_make_service_with_connect_info::<SocketAddr, _>());
|
||||
@@ -187,7 +187,7 @@ mod tests {
|
||||
|
||||
let (tx, rx) = tokio::sync::oneshot::channel();
|
||||
tokio::spawn(async move {
|
||||
let app = route("/", get(handler));
|
||||
let app = Router::new().route("/", get(handler));
|
||||
let server = Server::from_tcp(listener)
|
||||
.unwrap()
|
||||
.serve(app.into_make_service_with_connect_info::<MyConnectInfo, _>());
|
||||
|
||||
@@ -12,14 +12,14 @@ use std::ops::Deref;
|
||||
/// use axum::{
|
||||
/// extract::ContentLengthLimit,
|
||||
/// handler::post,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
///
|
||||
/// async fn handler(body: ContentLengthLimit<String, 1024>) {
|
||||
/// // ...
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/", post(handler));
|
||||
/// let app = Router::new().route("/", post(handler));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
|
||||
@@ -13,7 +13,7 @@ use std::ops::Deref;
|
||||
/// AddExtensionLayer,
|
||||
/// extract::Extension,
|
||||
/// handler::get,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use std::sync::Arc;
|
||||
///
|
||||
@@ -28,7 +28,7 @@ use std::ops::Deref;
|
||||
///
|
||||
/// let state = Arc::new(State { /* ... */ });
|
||||
///
|
||||
/// let app = route("/", get(handler))
|
||||
/// let app = Router::new().route("/", get(handler))
|
||||
/// // Add middleware that inserts the state into all incoming request's
|
||||
/// // extensions.
|
||||
/// .layer(AddExtensionLayer::new(state));
|
||||
|
||||
@@ -37,7 +37,7 @@ use tower::{BoxError, Layer, Service};
|
||||
/// use axum::{
|
||||
/// extract::{extractor_middleware, FromRequest, RequestParts},
|
||||
/// handler::{get, post},
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use http::StatusCode;
|
||||
/// use async_trait::async_trait;
|
||||
@@ -76,7 +76,8 @@ use tower::{BoxError, Layer, Service};
|
||||
/// // If we get here the request has been authorized
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/", get(handler))
|
||||
/// let app = Router::new()
|
||||
/// .route("/", get(handler))
|
||||
/// .route("/foo", post(other_handler))
|
||||
/// // The extractor will run before all routes
|
||||
/// .layer(extractor_middleware::<RequireAuth>());
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@ use tower::BoxError;
|
||||
/// use axum::{
|
||||
/// extract::Form,
|
||||
/// handler::post,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use serde::Deserialize;
|
||||
///
|
||||
@@ -33,7 +33,7 @@ use tower::BoxError;
|
||||
/// // ...
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/sign_up", post(accept_form));
|
||||
/// let app = Router::new().route("/sign_up", post(accept_form));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
|
||||
+16
-16
@@ -11,7 +11,7 @@
|
||||
//! use axum::{
|
||||
//! Json,
|
||||
//! handler::{post, Handler},
|
||||
//! route,
|
||||
//! Router,
|
||||
//! };
|
||||
//! use serde::Deserialize;
|
||||
//!
|
||||
@@ -27,7 +27,7 @@
|
||||
//! // ...
|
||||
//! }
|
||||
//!
|
||||
//! let app = route("/users", post(create_user));
|
||||
//! let app = Router::new().route("/users", post(create_user));
|
||||
//! # async {
|
||||
//! # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
//! # };
|
||||
@@ -42,7 +42,7 @@
|
||||
//! async_trait,
|
||||
//! extract::{FromRequest, RequestParts},
|
||||
//! handler::get,
|
||||
//! route,
|
||||
//! Router,
|
||||
//! };
|
||||
//! use http::{StatusCode, header::{HeaderValue, USER_AGENT}};
|
||||
//!
|
||||
@@ -72,7 +72,7 @@
|
||||
//! // ...
|
||||
//! }
|
||||
//!
|
||||
//! let app = route("/foo", get(handler));
|
||||
//! let app = Router::new().route("/foo", get(handler));
|
||||
//! # async {
|
||||
//! # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
//! # };
|
||||
@@ -86,7 +86,7 @@
|
||||
//! use axum::{
|
||||
//! extract::{Path, Query},
|
||||
//! handler::get,
|
||||
//! route,
|
||||
//! Router,
|
||||
//! };
|
||||
//! use std::collections::HashMap;
|
||||
//!
|
||||
@@ -101,7 +101,7 @@
|
||||
//! // ...
|
||||
//! }
|
||||
//!
|
||||
//! let app = route("/foo", get(handler));
|
||||
//! let app = Router::new().route("/foo", get(handler));
|
||||
//! # async {
|
||||
//! # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
//! # };
|
||||
@@ -118,7 +118,7 @@
|
||||
//! use axum::{
|
||||
//! extract::Json,
|
||||
//! handler::post,
|
||||
//! route,
|
||||
//! Router,
|
||||
//! };
|
||||
//! use serde_json::Value;
|
||||
//!
|
||||
@@ -130,7 +130,7 @@
|
||||
//! }
|
||||
//! }
|
||||
//!
|
||||
//! let app = route("/users", post(create_user));
|
||||
//! let app = Router::new().route("/users", post(create_user));
|
||||
//! # async {
|
||||
//! # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
//! # };
|
||||
@@ -143,7 +143,7 @@
|
||||
//! use axum::{
|
||||
//! extract::{Json, rejection::JsonRejection},
|
||||
//! handler::post,
|
||||
//! route,
|
||||
//! Router,
|
||||
//! };
|
||||
//! use serde_json::Value;
|
||||
//!
|
||||
@@ -169,7 +169,7 @@
|
||||
//! }
|
||||
//! }
|
||||
//!
|
||||
//! let app = route("/users", post(create_user));
|
||||
//! let app = Router::new().route("/users", post(create_user));
|
||||
//! # async {
|
||||
//! # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
//! # };
|
||||
@@ -184,7 +184,7 @@
|
||||
//! use axum::{
|
||||
//! extract::Json,
|
||||
//! handler::post,
|
||||
//! route,
|
||||
//! Router,
|
||||
//! };
|
||||
//! use serde_json::Value;
|
||||
//!
|
||||
@@ -192,7 +192,7 @@
|
||||
//! // `value` is of type `Value`
|
||||
//! }
|
||||
//!
|
||||
//! let app = route("/users", post(create_user));
|
||||
//! let app = Router::new().route("/users", post(create_user));
|
||||
//! # async {
|
||||
//! # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
//! # };
|
||||
@@ -217,7 +217,7 @@
|
||||
//! body::Body,
|
||||
//! handler::get,
|
||||
//! http::{header::HeaderMap, Request},
|
||||
//! route,
|
||||
//! Router,
|
||||
//! };
|
||||
//!
|
||||
//! struct MyBody<B>(B);
|
||||
@@ -244,10 +244,10 @@
|
||||
//! }
|
||||
//! }
|
||||
//!
|
||||
//! let app =
|
||||
//! // `String` works directly with any body type
|
||||
//! route(
|
||||
//! let app = Router::new()
|
||||
//! .route(
|
||||
//! "/string",
|
||||
//! // `String` works directly with any body type
|
||||
//! get(|_: String| async {})
|
||||
//! )
|
||||
//! .route(
|
||||
|
||||
@@ -23,7 +23,7 @@ use tower::BoxError;
|
||||
/// use axum::{
|
||||
/// extract::Multipart,
|
||||
/// handler::post,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use futures::stream::StreamExt;
|
||||
///
|
||||
@@ -36,7 +36,7 @@ use tower::BoxError;
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/upload", post(upload));
|
||||
/// let app = Router::new().route("/upload", post(upload));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
|
||||
@@ -14,7 +14,7 @@ use std::ops::{Deref, DerefMut};
|
||||
/// use axum::{
|
||||
/// extract::Path,
|
||||
/// handler::get,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use uuid::Uuid;
|
||||
///
|
||||
@@ -24,7 +24,7 @@ use std::ops::{Deref, DerefMut};
|
||||
/// // ...
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/users/:user_id/team/:team_id", get(users_teams_show));
|
||||
/// let app = Router::new().route("/users/:user_id/team/:team_id", get(users_teams_show));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
@@ -36,7 +36,7 @@ use std::ops::{Deref, DerefMut};
|
||||
/// use axum::{
|
||||
/// extract::Path,
|
||||
/// handler::get,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use uuid::Uuid;
|
||||
///
|
||||
@@ -44,7 +44,7 @@ use std::ops::{Deref, DerefMut};
|
||||
/// // ...
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/users/:user_id", get(user_info));
|
||||
/// let app = Router::new().route("/users/:user_id", get(user_info));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
@@ -57,7 +57,7 @@ use std::ops::{Deref, DerefMut};
|
||||
/// use axum::{
|
||||
/// extract::Path,
|
||||
/// handler::get,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use serde::Deserialize;
|
||||
/// use uuid::Uuid;
|
||||
@@ -74,7 +74,7 @@ use std::ops::{Deref, DerefMut};
|
||||
/// // ...
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/users/:user_id/team/:team_id", get(users_teams_show));
|
||||
/// let app = Router::new().route("/users/:user_id/team/:team_id", get(users_teams_show));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
|
||||
@@ -13,7 +13,7 @@ use std::ops::Deref;
|
||||
/// use axum::{
|
||||
/// extract::Query,
|
||||
/// handler::get,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use serde::Deserialize;
|
||||
///
|
||||
@@ -31,7 +31,7 @@ use std::ops::Deref;
|
||||
/// // ...
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/list_things", get(list_things));
|
||||
/// let app = Router::new().route("/list_things", get(list_things));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
|
||||
@@ -10,7 +10,7 @@ use std::convert::Infallible;
|
||||
/// use axum::{
|
||||
/// extract::RawQuery,
|
||||
/// handler::get,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use futures::StreamExt;
|
||||
///
|
||||
@@ -18,7 +18,7 @@ use std::convert::Infallible;
|
||||
/// // ...
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/users", get(handler));
|
||||
/// let app = Router::new().route("/users", get(handler));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
|
||||
@@ -92,21 +92,21 @@ where
|
||||
/// ```
|
||||
/// use axum::{
|
||||
/// handler::get,
|
||||
/// route,
|
||||
/// routing::nest,
|
||||
/// Router,
|
||||
/// extract::OriginalUri,
|
||||
/// http::Uri
|
||||
/// };
|
||||
///
|
||||
/// let api_routes = route(
|
||||
/// "/users",
|
||||
/// get(|uri: Uri, OriginalUri(original_uri): OriginalUri| async {
|
||||
/// // `uri` is `/users`
|
||||
/// // `original_uri` is `/api/users`
|
||||
/// }),
|
||||
/// );
|
||||
/// let api_routes = Router::new()
|
||||
/// .route(
|
||||
/// "/users",
|
||||
/// get(|uri: Uri, OriginalUri(original_uri): OriginalUri| async {
|
||||
/// // `uri` is `/users`
|
||||
/// // `original_uri` is `/api/users`
|
||||
/// }),
|
||||
/// );
|
||||
///
|
||||
/// let app = nest("/api", api_routes);
|
||||
/// let app = Router::new().nest("/api", api_routes);
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
@@ -174,7 +174,7 @@ where
|
||||
/// use axum::{
|
||||
/// extract::BodyStream,
|
||||
/// handler::get,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use futures::StreamExt;
|
||||
///
|
||||
@@ -184,7 +184,7 @@ where
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/users", get(handler));
|
||||
/// let app = Router::new().route("/users", get(handler));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
@@ -227,7 +227,7 @@ where
|
||||
/// use axum::{
|
||||
/// extract::Body,
|
||||
/// handler::get,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use futures::StreamExt;
|
||||
///
|
||||
@@ -235,7 +235,7 @@ where
|
||||
/// // ...
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/users", get(handler));
|
||||
/// let app = Router::new().route("/users", get(handler));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
@@ -289,14 +289,14 @@ where
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::{body::Body, handler::post, route, tests::*};
|
||||
use crate::{body::Body, handler::post, tests::*, Router};
|
||||
use http::StatusCode;
|
||||
|
||||
#[tokio::test]
|
||||
async fn multiple_request_extractors() {
|
||||
async fn handler(_: Request<Body>, _: Request<Body>) {}
|
||||
|
||||
let app = route("/", post(handler));
|
||||
let app = Router::new().route("/", post(handler));
|
||||
|
||||
let addr = run_in_background(app).await;
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ use std::{convert::Infallible, ops::Deref};
|
||||
/// use axum::{
|
||||
/// extract::TypedHeader,
|
||||
/// handler::get,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
/// use headers::UserAgent;
|
||||
///
|
||||
@@ -24,7 +24,7 @@ use std::{convert::Infallible, ops::Deref};
|
||||
/// // ...
|
||||
/// }
|
||||
///
|
||||
/// let app = route("/users/:user_id/team/:team_id", get(users_teams_show));
|
||||
/// let app = Router::new().route("/users/:user_id/team/:team_id", get(users_teams_show));
|
||||
/// # async {
|
||||
/// # axum::Server::bind(&"".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
|
||||
/// # };
|
||||
@@ -125,7 +125,7 @@ impl std::error::Error for TypedHeaderRejection {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::{handler::get, response::IntoResponse, route, tests::*};
|
||||
use crate::{handler::get, response::IntoResponse, tests::*, Router};
|
||||
|
||||
#[tokio::test]
|
||||
async fn typed_header() {
|
||||
@@ -135,7 +135,7 @@ mod tests {
|
||||
user_agent.to_string()
|
||||
}
|
||||
|
||||
let app = route("/", get(handle));
|
||||
let app = Router::new().route("/", get(handle));
|
||||
|
||||
let addr = run_in_background(app).await;
|
||||
|
||||
|
||||
+4
-4
@@ -7,10 +7,10 @@
|
||||
//! extract::ws::{WebSocketUpgrade, WebSocket},
|
||||
//! handler::get,
|
||||
//! response::IntoResponse,
|
||||
//! route,
|
||||
//! Router,
|
||||
//! };
|
||||
//!
|
||||
//! let app = route("/ws", get(handler));
|
||||
//! let app = Router::new().route("/ws", get(handler));
|
||||
//!
|
||||
//! async fn handler(ws: WebSocketUpgrade) -> impl IntoResponse {
|
||||
//! ws.on_upgrade(handle_socket)
|
||||
@@ -113,10 +113,10 @@ impl WebSocketUpgrade {
|
||||
/// extract::ws::{WebSocketUpgrade, WebSocket},
|
||||
/// handler::get,
|
||||
/// response::IntoResponse,
|
||||
/// route,
|
||||
/// Router,
|
||||
/// };
|
||||
///
|
||||
/// let app = route("/ws", get(handler));
|
||||
/// let app = Router::new().route("/ws", get(handler));
|
||||
///
|
||||
/// async fn handler(ws: WebSocketUpgrade) -> impl IntoResponse {
|
||||
/// ws.protocols(["graphql-ws", "graphql-transport-ws"])
|
||||
|
||||
Reference in New Issue
Block a user