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:
David Pedersen
2021-08-19 22:37:48 +02:00
committed by GitHub
parent 97b53768ba
commit ca4d9a2bb9
49 changed files with 652 additions and 625 deletions
+3 -3
View File
@@ -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, _>());
+2 -2
View File
@@ -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();
/// # };
+2 -2
View File
@@ -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));
+3 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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(
+2 -2
View File
@@ -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();
/// # };
+6 -6
View File
@@ -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();
/// # };
+2 -2
View File
@@ -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();
/// # };
+2 -2
View File
@@ -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();
/// # };
+16 -16
View File
@@ -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;
+4 -4
View File
@@ -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
View File
@@ -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"])