diff options
Diffstat (limited to 'examples')
43 files changed, 152 insertions, 217 deletions
diff --git a/examples/anyhow-error-response/src/main.rs b/examples/anyhow-error-response/src/main.rs index 68548313..b7a2416a 100644 --- a/examples/anyhow-error-response/src/main.rs +++ b/examples/anyhow-error-response/src/main.rs @@ -10,18 +10,16 @@ use axum::{ routing::get, Router, }; -use std::net::SocketAddr; #[tokio::main] async fn main() { let app = Router::new().route("/", get(handler)); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - println!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn handler() -> Result<(), AppError> { diff --git a/examples/chat/src/main.rs b/examples/chat/src/main.rs index 3b49c3e8..f7298c34 100644 --- a/examples/chat/src/main.rs +++ b/examples/chat/src/main.rs @@ -18,7 +18,6 @@ use axum::{ use futures::{sink::SinkExt, stream::StreamExt}; use std::{ collections::HashSet, - net::SocketAddr, sync::{Arc, Mutex}, }; use tokio::sync::broadcast; @@ -53,12 +52,11 @@ async fn main() { .route("/websocket", get(websocket_handler)) .with_state(app_state); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn websocket_handler( diff --git a/examples/consume-body-in-extractor-or-middleware/src/main.rs b/examples/consume-body-in-extractor-or-middleware/src/main.rs index f1b2cbf7..fd63fcb1 100644 --- a/examples/consume-body-in-extractor-or-middleware/src/main.rs +++ b/examples/consume-body-in-extractor-or-middleware/src/main.rs @@ -14,7 +14,6 @@ use axum::{ routing::post, Router, }; -use std::net::SocketAddr; use tower::ServiceBuilder; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -32,12 +31,11 @@ async fn main() { .route("/", post(handler)) .layer(ServiceBuilder::new().layer(middleware::from_fn(print_request_body))); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } // middleware that shows how to consume the request body upfront diff --git a/examples/cors/src/main.rs b/examples/cors/src/main.rs index a0a5e8d8..bbd19206 100644 --- a/examples/cors/src/main.rs +++ b/examples/cors/src/main.rs @@ -40,10 +40,8 @@ async fn main() { async fn serve(app: Router, port: u16) { let addr = SocketAddr::from(([127, 0, 0, 1], port)); - axum::Server::bind(&addr) - .serve(app.into_make_service()) - .await - .unwrap(); + let listener = tokio::net::TcpListener::bind(addr).await.unwrap(); + axum::serve(listener, app).await.unwrap(); } async fn html() -> impl IntoResponse { diff --git a/examples/customize-extractor-error/src/main.rs b/examples/customize-extractor-error/src/main.rs index 893fbd14..e8820326 100644 --- a/examples/customize-extractor-error/src/main.rs +++ b/examples/customize-extractor-error/src/main.rs @@ -9,7 +9,6 @@ mod derive_from_request; mod with_rejection; use axum::{routing::post, Router}; -use std::net::SocketAddr; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] @@ -29,10 +28,9 @@ async fn main() { .route("/derive-from-request", post(derive_from_request::handler)); // Run our application - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } diff --git a/examples/customize-path-rejection/src/main.rs b/examples/customize-path-rejection/src/main.rs index 3bcd91d3..fa382e4b 100644 --- a/examples/customize-path-rejection/src/main.rs +++ b/examples/customize-path-rejection/src/main.rs @@ -13,7 +13,6 @@ use axum::{ Router, }; use serde::{de::DeserializeOwned, Deserialize, Serialize}; -use std::net::SocketAddr; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] @@ -30,12 +29,11 @@ async fn main() { let app = Router::new().route("/users/:user_id/teams/:team_id", get(handler)); // run it - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - println!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn handler(Path(params): Path<Params>) -> impl IntoResponse { diff --git a/examples/error-handling-and-dependency-injection/src/main.rs b/examples/error-handling-and-dependency-injection/src/main.rs index f28ed4ff..a5bdad9e 100644 --- a/examples/error-handling-and-dependency-injection/src/main.rs +++ b/examples/error-handling-and-dependency-injection/src/main.rs @@ -17,7 +17,7 @@ use axum::{ }; use serde::{Deserialize, Serialize}; use serde_json::json; -use std::{net::SocketAddr, sync::Arc}; +use std::sync::Arc; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; use uuid::Uuid; @@ -42,12 +42,11 @@ async fn main() { .with_state(user_repo); // Run our application - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } /// Handler for `GET /users/:id`. diff --git a/examples/form/src/main.rs b/examples/form/src/main.rs index 93a5ae13..3f9ed095 100644 --- a/examples/form/src/main.rs +++ b/examples/form/src/main.rs @@ -6,7 +6,6 @@ use axum::{extract::Form, response::Html, routing::get, Router}; use serde::Deserialize; -use std::net::SocketAddr; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] @@ -22,13 +21,12 @@ async fn main() { // build our application with some routes let app = Router::new().route("/", get(show_form).post(accept_form)); - // run it with hyper - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + // run it + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn show_form() -> Html<&'static str> { diff --git a/examples/global-404-handler/src/main.rs b/examples/global-404-handler/src/main.rs index 8eb14691..38b02943 100644 --- a/examples/global-404-handler/src/main.rs +++ b/examples/global-404-handler/src/main.rs @@ -10,7 +10,6 @@ use axum::{ routing::get, Router, }; -use std::net::SocketAddr; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] @@ -30,12 +29,11 @@ async fn main() { let app = app.fallback(handler_404); // run it - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn handler() -> Html<&'static str> { diff --git a/examples/graceful-shutdown/Cargo.toml b/examples/graceful-shutdown/Cargo.toml index 19af3113..f287feeb 100644 --- a/examples/graceful-shutdown/Cargo.toml +++ b/examples/graceful-shutdown/Cargo.toml @@ -6,4 +6,5 @@ publish = false [dependencies] axum = { path = "../../axum" } +hyper = { version = "0.14", features = ["full"] } tokio = { version = "1.0", features = ["full"] } diff --git a/examples/graceful-shutdown/src/main.rs b/examples/graceful-shutdown/src/main.rs index 3704889a..dabfee16 100644 --- a/examples/graceful-shutdown/src/main.rs +++ b/examples/graceful-shutdown/src/main.rs @@ -17,7 +17,7 @@ async fn main() { // run it let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); println!("listening on {}", addr); - axum::Server::bind(&addr) + hyper::Server::bind(&addr) .serve(app.into_make_service()) .with_graceful_shutdown(shutdown_signal()) .await diff --git a/examples/handle-head-request/src/main.rs b/examples/handle-head-request/src/main.rs index 5b0db264..d49d88ef 100644 --- a/examples/handle-head-request/src/main.rs +++ b/examples/handle-head-request/src/main.rs @@ -6,7 +6,6 @@ use axum::response::{IntoResponse, Response}; use axum::{http, routing::get, Router}; -use std::net::SocketAddr; fn app() -> Router { Router::new().route("/get-head", get(get_head_handler)) @@ -14,12 +13,11 @@ fn app() -> Router { #[tokio::main] async fn main() { - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - - axum::Server::bind(&addr) - .serve(app().into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app()).await.unwrap(); } // GET routes will also be called for HEAD requests but will have the response body removed. diff --git a/examples/hello-world/src/main.rs b/examples/hello-world/src/main.rs index 466caceb..de018335 100644 --- a/examples/hello-world/src/main.rs +++ b/examples/hello-world/src/main.rs @@ -5,7 +5,6 @@ //! ``` use axum::{response::Html, routing::get, Router}; -use std::net::SocketAddr; #[tokio::main] async fn main() { @@ -13,12 +12,11 @@ async fn main() { let app = Router::new().route("/", get(handler)); // run it - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - println!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn handler() -> Html<&'static str> { diff --git a/examples/http-proxy/src/main.rs b/examples/http-proxy/src/main.rs index 08845ca9..1abf3bbf 100644 --- a/examples/http-proxy/src/main.rs +++ b/examples/http-proxy/src/main.rs @@ -52,7 +52,7 @@ async fn main() { let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) + hyper::Server::bind(&addr) .http1_preserve_header_case(true) .http1_title_case_headers(true) .serve(Shared::new(service)) diff --git a/examples/jwt/src/main.rs b/examples/jwt/src/main.rs index 4ee20d4b..a6f8bffa 100644 --- a/examples/jwt/src/main.rs +++ b/examples/jwt/src/main.rs @@ -19,7 +19,7 @@ use jsonwebtoken::{decode, encode, DecodingKey, EncodingKey, Header, Validation} use once_cell::sync::Lazy; use serde::{Deserialize, Serialize}; use serde_json::json; -use std::{fmt::Display, net::SocketAddr}; +use std::fmt::Display; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; // Quick instructions @@ -67,13 +67,11 @@ async fn main() { .route("/protected", get(protected)) .route("/authorize", post(authorize)); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn protected(claims: Claims) -> Result<String, AuthError> { diff --git a/examples/key-value-store/src/main.rs b/examples/key-value-store/src/main.rs index ccf21825..b22802cb 100644 --- a/examples/key-value-store/src/main.rs +++ b/examples/key-value-store/src/main.rs @@ -19,7 +19,6 @@ use axum::{ use std::{ borrow::Cow, collections::HashMap, - net::SocketAddr, sync::{Arc, RwLock}, time::Duration, }; @@ -74,12 +73,11 @@ async fn main() { .with_state(Arc::clone(&shared_state)); // Run our app with hyper - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } type SharedState = Arc<RwLock<AppState>>; diff --git a/examples/listen-multiple-addrs/src/main.rs b/examples/listen-multiple-addrs/src/main.rs index f292c1d6..fed70daa 100644 --- a/examples/listen-multiple-addrs/src/main.rs +++ b/examples/listen-multiple-addrs/src/main.rs @@ -28,7 +28,7 @@ async fn main() { b: incoming_v6, }; - axum::Server::builder(combined) + hyper::Server::builder(combined) .serve(app.into_make_service()) .await .unwrap(); diff --git a/examples/multipart-form/src/main.rs b/examples/multipart-form/src/main.rs index 31f2887e..f8c0d96b 100644 --- a/examples/multipart-form/src/main.rs +++ b/examples/multipart-form/src/main.rs @@ -10,7 +10,6 @@ use axum::{ routing::get, Router, }; -use std::net::SocketAddr; use tower_http::limit::RequestBodyLimitLayer; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -34,12 +33,11 @@ async fn main() { .layer(tower_http::trace::TraceLayer::new_for_http()); // run it with hyper - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn show_form() -> Html<&'static str> { diff --git a/examples/oauth/src/main.rs b/examples/oauth/src/main.rs index 1a01570f..40a039bc 100644 --- a/examples/oauth/src/main.rs +++ b/examples/oauth/src/main.rs @@ -25,7 +25,7 @@ use oauth2::{ ClientSecret, CsrfToken, RedirectUrl, Scope, TokenResponse, TokenUrl, }; use serde::{Deserialize, Serialize}; -use std::{env, net::SocketAddr}; +use std::env; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; static COOKIE_NAME: &str = "SESSION"; @@ -56,13 +56,11 @@ async fn main() { .route("/logout", get(logout)) .with_state(app_state); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } #[derive(Clone)] diff --git a/examples/parse-body-based-on-content-type/src/main.rs b/examples/parse-body-based-on-content-type/src/main.rs index 9ee26c6a..bae4ec1d 100644 --- a/examples/parse-body-based-on-content-type/src/main.rs +++ b/examples/parse-body-based-on-content-type/src/main.rs @@ -15,7 +15,6 @@ use axum::{ Form, Json, RequestExt, Router, }; use serde::{Deserialize, Serialize}; -use std::net::SocketAddr; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] @@ -31,12 +30,11 @@ async fn main() { let app = Router::new().route("/", post(handler)); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } #[derive(Debug, Serialize, Deserialize)] diff --git a/examples/print-request-response/src/main.rs b/examples/print-request-response/src/main.rs index 4703c058..1348d026 100644 --- a/examples/print-request-response/src/main.rs +++ b/examples/print-request-response/src/main.rs @@ -13,7 +13,6 @@ use axum::{ routing::post, Router, }; -use std::net::SocketAddr; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] @@ -30,12 +29,11 @@ async fn main() { .route("/", post(|| async move { "Hello from `POST /`" })) .layer(middleware::from_fn(print_request_response)); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn print_request_response( diff --git a/examples/prometheus-metrics/src/main.rs b/examples/prometheus-metrics/src/main.rs index 675310be..b90c384f 100644 --- a/examples/prometheus-metrics/src/main.rs +++ b/examples/prometheus-metrics/src/main.rs @@ -17,7 +17,6 @@ use axum::{ use metrics_exporter_prometheus::{Matcher, PrometheusBuilder, PrometheusHandle}; use std::{ future::ready, - net::SocketAddr, time::{Duration, Instant}, }; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -42,24 +41,22 @@ fn main_app() -> Router { async fn start_main_server() { let app = main_app(); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await - .unwrap() + .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn start_metrics_server() { let app = metrics_app(); // NOTE: expose metrics enpoint on a different port - let addr = SocketAddr::from(([127, 0, 0, 1], 3001)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3001") .await - .unwrap() + .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } #[tokio::main] diff --git a/examples/query-params-with-empty-strings/src/main.rs b/examples/query-params-with-empty-strings/src/main.rs index aa424643..19117c4e 100644 --- a/examples/query-params-with-empty-strings/src/main.rs +++ b/examples/query-params-with-empty-strings/src/main.rs @@ -10,10 +10,11 @@ use std::{fmt, str::FromStr}; #[tokio::main] async fn main() { - axum::Server::bind(&"0.0.0.0:3000".parse().unwrap()) - .serve(app().into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app()).await.unwrap(); } fn app() -> Router { diff --git a/examples/readme/src/main.rs b/examples/readme/src/main.rs index bdcb8945..cd2120cb 100644 --- a/examples/readme/src/main.rs +++ b/examples/readme/src/main.rs @@ -11,7 +11,6 @@ use axum::{ Json, Router, }; use serde::{Deserialize, Serialize}; -use std::net::SocketAddr; #[tokio::main] async fn main() { @@ -26,13 +25,11 @@ async fn main() { .route("/users", post(create_user)); // run our app with hyper - // `axum::Server` is a re-export of `hyper::Server` - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } // basic handler that responds with a static string diff --git a/examples/rest-grpc-multiplex/src/main.rs b/examples/rest-grpc-multiplex/src/main.rs index f804f6ae..b7f0ab02 100644 --- a/examples/rest-grpc-multiplex/src/main.rs +++ b/examples/rest-grpc-multiplex/src/main.rs @@ -75,7 +75,7 @@ async fn main() { let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) + hyper::Server::bind(&addr) .serve(tower::make::Shared::new(service)) .await .unwrap(); diff --git a/examples/reverse-proxy/src/main.rs b/examples/reverse-proxy/src/main.rs index a01947c6..875a3a5a 100644 --- a/examples/reverse-proxy/src/main.rs +++ b/examples/reverse-proxy/src/main.rs @@ -16,7 +16,6 @@ use axum::{ Router, }; use hyper::client::HttpConnector; -use std::net::SocketAddr; type Client = hyper::client::Client<HttpConnector, Body>; @@ -28,12 +27,11 @@ async fn main() { let app = Router::new().route("/", get(handler)).with_state(client); - let addr = SocketAddr::from(([127, 0, 0, 1], 4000)); - println!("reverse proxy listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:4000") .await .unwrap(); + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn handler(State(client): State<Client>, mut req: Request) -> Response { @@ -54,10 +52,9 @@ async fn handler(State(client): State<Client>, mut req: Request) -> Response { async fn server() { let app = Router::new().route("/", get(|| async { "Hello, world!" })); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - println!("server listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } diff --git a/examples/routes-and-handlers-close-together/src/main.rs b/examples/routes-and-handlers-close-together/src/main.rs index 75320d09..50721e70 100644 --- a/examples/routes-and-handlers-close-together/src/main.rs +++ b/examples/routes-and-handlers-close-together/src/main.rs @@ -8,7 +8,6 @@ use axum::{ routing::{get, post, MethodRouter}, Router, }; -use std::net::SocketAddr; #[tokio::main] async fn main() { @@ -17,12 +16,11 @@ async fn main() { .merge(get_foo()) .merge(post_foo()); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - println!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } fn root() -> Router { diff --git a/examples/sessions/src/main.rs b/examples/sessions/src/main.rs index 9bea9c1b..fcac6c56 100644 --- a/examples/sessions/src/main.rs +++ b/examples/sessions/src/main.rs @@ -21,7 +21,6 @@ use axum::{ }; use serde::{Deserialize, Serialize}; use std::fmt::Debug; -use std::net::SocketAddr; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; use uuid::Uuid; @@ -42,12 +41,11 @@ async fn main() { let app = Router::new().route("/", get(handler)).with_state(store); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn handler(user_id: UserIdFromSession) -> impl IntoResponse { diff --git a/examples/sqlx-postgres/src/main.rs b/examples/sqlx-postgres/src/main.rs index 8e3353b9..e9553037 100644 --- a/examples/sqlx-postgres/src/main.rs +++ b/examples/sqlx-postgres/src/main.rs @@ -21,9 +21,10 @@ use axum::{ Router, }; use sqlx::postgres::{PgPool, PgPoolOptions}; +use tokio::net::TcpListener; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; -use std::{net::SocketAddr, time::Duration}; +use std::time::Duration; #[tokio::main] async fn main() { @@ -55,12 +56,9 @@ async fn main() { .with_state(pool); // run it with hyper - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) - .await - .unwrap(); + let listener = TcpListener::bind("127.0.0.1:3000").await.unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } // we can extract the connection pool with `State` diff --git a/examples/sse/src/main.rs b/examples/sse/src/main.rs index dab5a565..52888133 100644 --- a/examples/sse/src/main.rs +++ b/examples/sse/src/main.rs @@ -11,7 +11,7 @@ use axum::{ Router, }; use futures::stream::{self, Stream}; -use std::{convert::Infallible, net::SocketAddr, path::PathBuf, time::Duration}; +use std::{convert::Infallible, path::PathBuf, time::Duration}; use tokio_stream::StreamExt as _; use tower_http::{services::ServeDir, trace::TraceLayer}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -37,12 +37,11 @@ async fn main() { .layer(TraceLayer::new_for_http()); // run it - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn sse_handler( diff --git a/examples/static-file-server/src/main.rs b/examples/static-file-server/src/main.rs index 3a3a2414..3aa7a9a8 100644 --- a/examples/static-file-server/src/main.rs +++ b/examples/static-file-server/src/main.rs @@ -103,9 +103,9 @@ fn calling_serve_dir_from_a_handler() -> Router { async fn serve(app: Router, port: u16) { let addr = SocketAddr::from(([127, 0, 0, 1], port)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.layer(TraceLayer::new_for_http()).into_make_service()) + let listener = tokio::net::TcpListener::bind(addr).await.unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app.layer(TraceLayer::new_for_http())) .await .unwrap(); } diff --git a/examples/stream-to-file/src/main.rs b/examples/stream-to-file/src/main.rs index 2d514162..02164d4e 100644 --- a/examples/stream-to-file/src/main.rs +++ b/examples/stream-to-file/src/main.rs @@ -13,7 +13,7 @@ use axum::{ BoxError, Router, }; use futures::{Stream, TryStreamExt}; -use std::{io, net::SocketAddr}; +use std::io; use tokio::{fs::File, io::BufWriter}; use tokio_util::io::StreamReader; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -39,12 +39,11 @@ async fn main() { .route("/", get(show_form).post(accept_form)) .route("/file/:file_name", post(save_request_body)); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } // Handler that streams the request body to a file. diff --git a/examples/templates/src/main.rs b/examples/templates/src/main.rs index d7e01a94..1abdb33e 100644 --- a/examples/templates/src/main.rs +++ b/examples/templates/src/main.rs @@ -12,7 +12,6 @@ use axum::{ routing::get, Router, }; -use std::net::SocketAddr; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] @@ -29,12 +28,11 @@ async fn main() { let app = Router::new().route("/greet/:name", get(greet)); // run it - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn greet(extract::Path(name): extract::Path<String>) -> impl IntoResponse { diff --git a/examples/testing-websockets/src/main.rs b/examples/testing-websockets/src/main.rs index b778115c..954168b1 100644 --- a/examples/testing-websockets/src/main.rs +++ b/examples/testing-websockets/src/main.rs @@ -14,16 +14,14 @@ use axum::{ Router, }; use futures::{Sink, SinkExt, Stream, StreamExt}; -use std::net::SocketAddr; #[tokio::main] async fn main() { - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - println!("listening on {addr}"); - axum::Server::bind(&addr) - .serve(app().into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app()).await.unwrap(); } fn app() -> Router { @@ -94,17 +92,18 @@ where #[cfg(test)] mod tests { use super::*; - use std::net::Ipv4Addr; + use std::net::{Ipv4Addr, SocketAddr}; use tokio_tungstenite::tungstenite; // We can integration test one handler by running the server in a background task and // connecting to it like any other client would. #[tokio::test] async fn integration_test() { - let server = axum::Server::bind(&SocketAddr::from((Ipv4Addr::UNSPECIFIED, 0))) - .serve(app().into_make_service()); - let addr = server.local_addr(); - tokio::spawn(server); + let listener = tokio::net::TcpListener::bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, 0))) + .await + .unwrap(); + let addr = listener.local_addr().unwrap(); + tokio::spawn(axum::serve(listener, app())); let (mut socket, _response) = tokio_tungstenite::connect_async(format!("ws://{addr}/integration-testable")) diff --git a/examples/testing/src/main.rs b/examples/testing/src/main.rs index 5f7dbc07..99cc0402 100644 --- a/examples/testing/src/main.rs +++ b/examples/testing/src/main.rs @@ -24,14 +24,11 @@ async fn main() { .with(tracing_subscriber::fmt::layer()) .init(); - let addr = std::net::SocketAddr::from(([127, 0, 0, 1], 3000)); - - tracing::debug!("listening on {}", addr); - - axum::Server::bind(&addr) - .serve(app().into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app()).await.unwrap(); } /// Having a function that produces our app makes it easy to call it from tests @@ -63,7 +60,8 @@ mod tests { http::{self, Request, StatusCode}, }; use serde_json::{json, Value}; - use std::net::{SocketAddr, TcpListener}; + use std::net::SocketAddr; + use tokio::net::TcpListener; use tower::Service; // for `call` use tower::ServiceExt; // for `oneshot` and `ready` @@ -131,15 +129,11 @@ mod tests { // You can also spawn a server and talk to it like any other HTTP server: #[tokio::test] async fn the_real_deal() { - let listener = TcpListener::bind("0.0.0.0:0".parse::<SocketAddr>().unwrap()).unwrap(); + let listener = TcpListener::bind("0.0.0.0:0").await.unwrap(); let addr = listener.local_addr().unwrap(); tokio::spawn(async move { - axum::Server::from_tcp(listener) - .unwrap() - .serve(app().into_make_service()) - .await - .unwrap(); + axum::serve(listener, app()).await.unwrap(); }); let client = hyper::Client::new(); diff --git a/examples/tls-rustls/src/main.rs b/examples/tls-rustls/src/main.rs index 5034cf31..860f56b5 100644 --- a/examples/tls-rustls/src/main.rs +++ b/examples/tls-rustls/src/main.rs @@ -93,10 +93,9 @@ async fn redirect_http_to_https(ports: Ports) { }; let addr = SocketAddr::from(([127, 0, 0, 1], ports.http)); - tracing::debug!("http redirect listening on {}", addr); - - axum::Server::bind(&addr) - .serve(redirect.into_make_service()) + let listener = tokio::net::TcpListener::bind(addr).await.unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, redirect.into_make_service()) .await .unwrap(); } diff --git a/examples/todos/src/main.rs b/examples/todos/src/main.rs index 4463bfa4..9e08876d 100644 --- a/examples/todos/src/main.rs +++ b/examples/todos/src/main.rs @@ -24,7 +24,6 @@ use axum::{ use serde::{Deserialize, Serialize}; use std::{ collections::HashMap, - net::SocketAddr, sync::{Arc, RwLock}, time::Duration, }; @@ -68,12 +67,11 @@ async fn main() { ) .with_state(db); - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } // The query parameters for todos index diff --git a/examples/tokio-postgres/src/main.rs b/examples/tokio-postgres/src/main.rs index 77c4c112..effc0320 100644 --- a/examples/tokio-postgres/src/main.rs +++ b/examples/tokio-postgres/src/main.rs @@ -13,7 +13,6 @@ use axum::{ }; use bb8::{Pool, PooledConnection}; use bb8_postgres::PostgresConnectionManager; -use std::net::SocketAddr; use tokio_postgres::NoTls; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -41,13 +40,12 @@ async fn main() { ) .with_state(pool); - // run it with hyper - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + // run it + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } type ConnectionPool = Pool<PostgresConnectionManager<NoTls>>; diff --git a/examples/tracing-aka-logging/src/main.rs b/examples/tracing-aka-logging/src/main.rs index 6b4524ac..74a2055a 100644 --- a/examples/tracing-aka-logging/src/main.rs +++ b/examples/tracing-aka-logging/src/main.rs @@ -12,7 +12,8 @@ use axum::{ routing::get, Router, }; -use std::{net::SocketAddr, time::Duration}; +use std::time::Duration; +use tokio::net::TcpListener; use tower_http::{classify::ServerErrorsFailureClass, trace::TraceLayer}; use tracing::{info_span, Span}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -80,12 +81,9 @@ async fn main() { ); // run it - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) - .await - .unwrap(); + let listener = TcpListener::bind("127.0.0.1:3000").await.unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn handler() -> Html<&'static str> { diff --git a/examples/unix-domain-socket/src/main.rs b/examples/unix-domain-socket/src/main.rs index 0a3d3f0d..ce350720 100644 --- a/examples/unix-domain-socket/src/main.rs +++ b/examples/unix-domain-socket/src/main.rs @@ -63,7 +63,7 @@ mod unix { tokio::spawn(async { let app = Router::new().route("/", get(handler)); - axum::Server::builder(ServerAccept { uds }) + hyper::Server::builder(ServerAccept { uds }) .serve(app.into_make_service_with_connect_info::<UdsConnectInfo>()) .await .unwrap(); diff --git a/examples/validator/src/main.rs b/examples/validator/src/main.rs index 4f4f6239..a6a25b85 100644 --- a/examples/validator/src/main.rs +++ b/examples/validator/src/main.rs @@ -19,8 +19,8 @@ use axum::{ Router, }; use serde::{de::DeserializeOwned, Deserialize}; -use std::net::SocketAddr; use thiserror::Error; +use tokio::net::TcpListener; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; use validator::Validate; @@ -38,13 +38,9 @@ async fn main() { let app = Router::new().route("/", get(handler)); // run it - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - - axum::Server::bind(&addr) - .serve(app.into_make_service()) - .await - .unwrap(); + let listener = TcpListener::bind("127.0.0.1:3000").await.unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } #[derive(Debug, Deserialize, Validate)] diff --git a/examples/versioning/src/main.rs b/examples/versioning/src/main.rs index fd3f6668..b5324d69 100644 --- a/examples/versioning/src/main.rs +++ b/examples/versioning/src/main.rs @@ -12,7 +12,7 @@ use axum::{ routing::get, RequestPartsExt, Router, }; -use std::{collections::HashMap, net::SocketAddr}; +use std::collections::HashMap; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; #[tokio::main] @@ -29,12 +29,11 @@ async fn main() { let app = Router::new().route("/:version/foo", get(handler)); // run it - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } async fn handler(version: Version) { diff --git a/examples/websockets/src/main.rs b/examples/websockets/src/main.rs index 73993c15..e13182bb 100644 --- a/examples/websockets/src/main.rs +++ b/examples/websockets/src/main.rs @@ -66,12 +66,16 @@ async fn main() { ); // run it with hyper - let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); - tracing::debug!("listening on {}", addr); - axum::Server::bind(&addr) - .serve(app.into_make_service_with_connect_info::<SocketAddr>()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); + tracing::debug!("listening on {}", listener.local_addr().unwrap()); + axum::serve( + listener, + app.into_make_service_with_connect_info::<SocketAddr>(), + ) + .await + .unwrap(); } /// The handler for the HTTP request (this gets called when the HTTP GET lands at the start |