New method router (#521)

* Empty crate

* basic setup

* Support `HEAD`

* Add remaining methods

* Impl Debug

* Add `MethodRouter::merge`

* WIP

* Support same route with different methods in different calls

* Update changelog

* Bring back `any` and `any_service`

* Address review feedback
This commit is contained in:
David Pedersen
2021-11-16 20:49:07 +01:00
committed by GitHub
parent 3cf8ee3b5e
commit 2bd0310463
25 changed files with 1533 additions and 803 deletions
+2 -3
View File
@@ -5,11 +5,10 @@
//! ```
use axum::{
error_handling::HandleErrorExt,
extract::TypedHeader,
http::StatusCode,
response::sse::{Event, Sse},
routing::{get, service_method_routing as service},
routing::{get, get_service},
Router,
};
use futures::stream::{self, Stream};
@@ -26,7 +25,7 @@ async fn main() {
tracing_subscriber::fmt::init();
let static_files_service =
service::get(ServeDir::new("examples/sse/assets").append_index_html_on_directories(true))
get_service(ServeDir::new("examples/sse/assets").append_index_html_on_directories(true))
.handle_error(|error: std::io::Error| {
(
StatusCode::INTERNAL_SERVER_ERROR,
+2 -5
View File
@@ -4,10 +4,7 @@
//! cargo run -p example-static-file-server
//! ```
use axum::{
error_handling::HandleErrorExt, http::StatusCode, routing::service_method_routing as service,
Router,
};
use axum::{http::StatusCode, routing::get_service, Router};
use std::net::SocketAddr;
use tower_http::{services::ServeDir, trace::TraceLayer};
@@ -25,7 +22,7 @@ async fn main() {
let app = Router::new()
.nest(
"/static",
service::get(ServeDir::new(".")).handle_error(|error: std::io::Error| {
get_service(ServeDir::new(".")).handle_error(|error: std::io::Error| {
(
StatusCode::INTERNAL_SERVER_ERROR,
format!("Unhandled internal error: {}", error),
+2 -3
View File
@@ -7,14 +7,13 @@
//! ```
use axum::{
error_handling::HandleErrorExt,
extract::{
ws::{Message, WebSocket, WebSocketUpgrade},
TypedHeader,
},
http::StatusCode,
response::IntoResponse,
routing::{get, service_method_routing as service},
routing::{get, get_service},
Router,
};
use std::net::SocketAddr;
@@ -34,7 +33,7 @@ async fn main() {
// build our application with some routes
let app = Router::new()
.fallback(
service::get(
get_service(
ServeDir::new("examples/websockets/assets").append_index_html_on_directories(true),
)
.handle_error(|error: std::io::Error| {