mirror of
https://github.com/tokio-rs/axum.git
synced 2026-02-06 11:17:48 +00:00
Fix return types of serve futures (#3601)
This commit is contained in:
parent
370c6df40a
commit
f3a95d786a
@ -438,7 +438,7 @@ pub fn derive_from_request_parts(item: TokenStream) -> TokenStream {
|
||||
/// let app = Router::new().route("/", get(handler));
|
||||
///
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, app).await.unwrap();
|
||||
/// axum::serve(listener, app).await;
|
||||
/// }
|
||||
///
|
||||
/// fn handler() -> &'static str {
|
||||
@ -458,7 +458,7 @@ pub fn derive_from_request_parts(item: TokenStream) -> TokenStream {
|
||||
/// # let app = Router::new().route("/", get(handler));
|
||||
/// #
|
||||
/// # let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// # axum::serve(listener, app).await.unwrap();
|
||||
/// # axum::serve(listener, app).await;
|
||||
/// # }
|
||||
/// #
|
||||
/// #[debug_handler]
|
||||
@ -485,7 +485,7 @@ pub fn derive_from_request_parts(item: TokenStream) -> TokenStream {
|
||||
/// let app = Router::new().route("/", get(handler));
|
||||
///
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, app).await.unwrap();
|
||||
/// axum::serve(listener, app).await;
|
||||
/// }
|
||||
///
|
||||
/// #[debug_handler]
|
||||
@ -607,7 +607,7 @@ pub fn debug_handler(_attr: TokenStream, input: TokenStream) -> TokenStream {
|
||||
/// .layer(middleware::from_fn(my_middleware));
|
||||
///
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, app).await.unwrap();
|
||||
/// axum::serve(listener, app).await;
|
||||
/// }
|
||||
///
|
||||
/// // if this wasn't a valid middleware function #[debug_middleware] would
|
||||
|
||||
@ -11,6 +11,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- **breaking:** `#[from_request(via(Extractor))]` now uses the extractor's
|
||||
rejection type instead of `axum::response::Response` ([#3261])
|
||||
- **breaking:** `axum::serve` now applies hyper's default `header_read_timeout` ([#3478])
|
||||
- **breaking:** `axum::serve` future output type has been adjusted to remove `io::Result`
|
||||
(never returned `Err`) and be an uninhabited type if `with_graceful_shutdown` is not used
|
||||
(because it was already never terminating if that method wasn't used) ([#3601])
|
||||
- **added:** New `ListenerExt::limit_connections` allows limiting concurrent `axum::serve` connections ([#3489])
|
||||
- **changed:** `serve` has an additional generic argument and can now work with any response body
|
||||
type, not just `axum::body::Body` ([#3205])
|
||||
@ -19,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
[#3261]: https://github.com/tokio-rs/axum/pull/3261
|
||||
[#3205]: https://github.com/tokio-rs/axum/pull/3205
|
||||
[#3478]: https://github.com/tokio-rs/axum/pull/3478
|
||||
[#3601]: https://github.com/tokio-rs/axum/pull/3601
|
||||
[#3489]: https://github.com/tokio-rs/axum/pull/3489
|
||||
|
||||
# 0.8.8
|
||||
|
||||
@ -54,7 +54,7 @@ async fn main() {
|
||||
|
||||
// run our app with hyper, listening globally on port 3000
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
// basic handler that responds with a static string
|
||||
|
||||
@ -163,9 +163,9 @@ impl BenchmarkBuilder {
|
||||
.unwrap();
|
||||
let addr = listener.local_addr().unwrap();
|
||||
|
||||
#[allow(unreachable_code)] // buggy lint, fixed in nightly
|
||||
std::thread::spawn(move || {
|
||||
rt.block_on(axum::serve(listener, app).into_future())
|
||||
.unwrap();
|
||||
rt.block_on(axum::serve(listener, app).into_future());
|
||||
});
|
||||
|
||||
let mut cmd = Command::new("rewrk");
|
||||
|
||||
@ -557,7 +557,7 @@ let app_with_middleware = middleware.layer(app);
|
||||
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, app_with_middleware.into_make_service()).await.unwrap();
|
||||
axum::serve(listener, app_with_middleware.into_make_service()).await;
|
||||
# };
|
||||
```
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ let app = Router::new().fallback(handler);
|
||||
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
# };
|
||||
```
|
||||
|
||||
@ -56,6 +56,6 @@ async fn handler() {}
|
||||
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, handler.into_make_service()).await.unwrap();
|
||||
axum::serve(listener, handler.into_make_service()).await;
|
||||
# };
|
||||
```
|
||||
|
||||
@ -22,7 +22,7 @@ async fn handler(ConnectInfo(addr): ConnectInfo<SocketAddr>) -> String {
|
||||
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, app.into_make_service_with_connect_info::<SocketAddr>()).await.unwrap();
|
||||
axum::serve(listener, app.into_make_service_with_connect_info::<SocketAddr>()).await;
|
||||
# };
|
||||
```
|
||||
|
||||
@ -60,7 +60,7 @@ impl Connected<IncomingStream<'_, TcpListener>> for MyConnectInfo {
|
||||
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, app.into_make_service_with_connect_info::<MyConnectInfo>()).await.unwrap();
|
||||
axum::serve(listener, app.into_make_service_with_connect_info::<MyConnectInfo>()).await;
|
||||
# };
|
||||
```
|
||||
|
||||
|
||||
@ -27,7 +27,7 @@ async fn main() {
|
||||
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
|
||||
axum::serve(listener, router).await.unwrap();
|
||||
axum::serve(listener, router).await;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ let routes = Router::new()
|
||||
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, routes).await.unwrap();
|
||||
axum::serve(listener, routes).await;
|
||||
# };
|
||||
```
|
||||
|
||||
@ -41,7 +41,7 @@ let routes = routes().with_state(AppState {});
|
||||
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, routes).await.unwrap();
|
||||
axum::serve(listener, routes).await;
|
||||
# };
|
||||
```
|
||||
|
||||
@ -64,7 +64,7 @@ let routes = routes(AppState {});
|
||||
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, routes).await.unwrap();
|
||||
axum::serve(listener, routes).await;
|
||||
# };
|
||||
```
|
||||
|
||||
@ -91,7 +91,7 @@ let routes = Router::new().nest("/api", routes(AppState {}));
|
||||
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, routes).await.unwrap();
|
||||
axum::serve(listener, routes).await;
|
||||
# };
|
||||
```
|
||||
|
||||
@ -124,7 +124,7 @@ let router: Router<()> = router.with_state(AppState {});
|
||||
// because it is still missing an `AppState`.
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, router).await.unwrap();
|
||||
axum::serve(listener, router).await;
|
||||
# };
|
||||
```
|
||||
|
||||
@ -153,7 +153,7 @@ let final_router: Router<()> = string_router.with_state("foo".to_owned());
|
||||
// Since we have a `Router<()>` we can run it.
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, final_router).await.unwrap();
|
||||
axum::serve(listener, final_router).await;
|
||||
# };
|
||||
```
|
||||
|
||||
@ -179,7 +179,7 @@ let app = routes(AppState {});
|
||||
// but `app` is a `Router<AppState>`
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
# };
|
||||
```
|
||||
|
||||
@ -202,7 +202,7 @@ let app = routes(AppState {});
|
||||
// We can now call `Router::into_make_service`
|
||||
# async {
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
# };
|
||||
```
|
||||
|
||||
|
||||
@ -321,8 +321,7 @@ mod tests {
|
||||
listener,
|
||||
app.into_make_service_with_connect_info::<SocketAddr>(),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
.await;
|
||||
});
|
||||
rx.await.unwrap();
|
||||
|
||||
@ -363,8 +362,7 @@ mod tests {
|
||||
listener,
|
||||
app.into_make_service_with_connect_info::<MyConnectInfo>(),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
.await;
|
||||
});
|
||||
rx.await.unwrap();
|
||||
|
||||
@ -410,8 +408,7 @@ mod tests {
|
||||
listener,
|
||||
app.into_make_service_with_connect_info::<SocketAddr>(),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
.await;
|
||||
});
|
||||
|
||||
let client = reqwest::Client::new();
|
||||
|
||||
@ -157,7 +157,7 @@ use std::{
|
||||
///
|
||||
/// # async {
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, handler_with_state.into_make_service()).await.unwrap();
|
||||
/// axum::serve(listener, handler_with_state.into_make_service()).await;
|
||||
/// # };
|
||||
/// ```
|
||||
///
|
||||
|
||||
@ -55,7 +55,7 @@ impl<H, T, S> HandlerService<H, T, S> {
|
||||
///
|
||||
/// # async {
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, app.into_make_service()).await.unwrap();
|
||||
/// axum::serve(listener, app.into_make_service()).await;
|
||||
/// # };
|
||||
/// ```
|
||||
///
|
||||
@ -94,7 +94,7 @@ impl<H, T, S> HandlerService<H, T, S> {
|
||||
/// axum::serve(
|
||||
/// listener,
|
||||
/// app.into_make_service_with_connect_info::<SocketAddr>(),
|
||||
/// ).await.unwrap();
|
||||
/// ).await;
|
||||
/// # };
|
||||
/// ```
|
||||
///
|
||||
|
||||
@ -37,7 +37,7 @@
|
||||
//!
|
||||
//! // run our app with hyper, listening globally on port 3000
|
||||
//! let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
//! axum::serve(listener, app).await.unwrap();
|
||||
//! axum::serve(listener, app).await;
|
||||
//! }
|
||||
//! ```
|
||||
//!
|
||||
|
||||
@ -697,7 +697,7 @@ impl MethodRouter<(), Infallible> {
|
||||
///
|
||||
/// # async {
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, router.into_make_service()).await.unwrap();
|
||||
/// axum::serve(listener, router.into_make_service()).await;
|
||||
/// # };
|
||||
/// ```
|
||||
///
|
||||
@ -729,7 +729,7 @@ impl MethodRouter<(), Infallible> {
|
||||
///
|
||||
/// # async {
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, router.into_make_service()).await.unwrap();
|
||||
/// axum::serve(listener, router.into_make_service()).await;
|
||||
/// # };
|
||||
/// ```
|
||||
///
|
||||
@ -1451,7 +1451,7 @@ mod tests {
|
||||
);
|
||||
|
||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:0").await.unwrap();
|
||||
crate::serve(listener, app).await.unwrap();
|
||||
crate::serve(listener, app).await;
|
||||
}
|
||||
|
||||
#[crate::test]
|
||||
|
||||
@ -532,7 +532,7 @@ impl Router {
|
||||
///
|
||||
/// # async {
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, app).await.unwrap();
|
||||
/// axum::serve(listener, app).await;
|
||||
/// # };
|
||||
/// ```
|
||||
///
|
||||
|
||||
@ -110,7 +110,7 @@ pub trait ListenerExt: Listener + Sized {
|
||||
/// trace!("failed to set TCP_NODELAY on incoming connection: {err:#}");
|
||||
/// }
|
||||
/// });
|
||||
/// axum::serve(listener, router).await.unwrap();
|
||||
/// axum::serve(listener, router).await;
|
||||
/// # };
|
||||
/// ```
|
||||
fn tap_io<F>(self, tap_fn: F) -> TapIo<Self, F>
|
||||
|
||||
@ -44,7 +44,7 @@ pub use self::listener::{ConnLimiter, ConnLimiterIo, Listener, ListenerExt, TapI
|
||||
/// let router = Router::new().route("/", get(|| async { "Hello, World!" }));
|
||||
///
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, router).await.unwrap();
|
||||
/// axum::serve(listener, router).await;
|
||||
/// # };
|
||||
/// ```
|
||||
///
|
||||
@ -59,7 +59,7 @@ pub use self::listener::{ConnLimiter, ConnLimiterIo, Listener, ListenerExt, TapI
|
||||
/// let router = get(|| async { "Hello, World!" });
|
||||
///
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, router).await.unwrap();
|
||||
/// axum::serve(listener, router).await;
|
||||
/// # };
|
||||
/// ```
|
||||
///
|
||||
@ -76,7 +76,7 @@ pub use self::listener::{ConnLimiter, ConnLimiterIo, Listener, ListenerExt, TapI
|
||||
/// }
|
||||
///
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, handler.into_make_service()).await.unwrap();
|
||||
/// axum::serve(listener, handler.into_make_service()).await;
|
||||
/// # };
|
||||
/// ```
|
||||
///
|
||||
@ -142,8 +142,7 @@ where
|
||||
/// let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
|
||||
/// axum::serve(listener, router)
|
||||
/// .with_graceful_shutdown(shutdown_signal())
|
||||
/// .await
|
||||
/// .unwrap();
|
||||
/// .await;
|
||||
/// # };
|
||||
///
|
||||
/// async fn shutdown_signal() {
|
||||
@ -237,7 +236,7 @@ where
|
||||
B::Data: Send,
|
||||
B::Error: Into<Box<dyn StdError + Send + Sync>>,
|
||||
{
|
||||
type Output = io::Result<()>;
|
||||
type Output = Infallible;
|
||||
type IntoFuture = private::ServeFuture;
|
||||
|
||||
fn into_future(self) -> Self::IntoFuture {
|
||||
@ -358,14 +357,11 @@ where
|
||||
B::Data: Send,
|
||||
B::Error: Into<Box<dyn StdError + Send + Sync>>,
|
||||
{
|
||||
type Output = io::Result<()>;
|
||||
type IntoFuture = private::ServeFuture;
|
||||
type Output = ();
|
||||
type IntoFuture = private::ServeFuture<()>;
|
||||
|
||||
fn into_future(self) -> Self::IntoFuture {
|
||||
private::ServeFuture(Box::pin(async move {
|
||||
self.run().await;
|
||||
Ok(())
|
||||
}))
|
||||
private::ServeFuture(Box::pin(async move { self.run().await }))
|
||||
}
|
||||
}
|
||||
|
||||
@ -473,16 +469,16 @@ where
|
||||
|
||||
mod private {
|
||||
use std::{
|
||||
convert::Infallible,
|
||||
future::Future,
|
||||
io,
|
||||
pin::Pin,
|
||||
task::{Context, Poll},
|
||||
};
|
||||
|
||||
pub struct ServeFuture(pub(super) futures_core::future::BoxFuture<'static, io::Result<()>>);
|
||||
pub struct ServeFuture<T = Infallible>(pub(super) futures_core::future::BoxFuture<'static, T>);
|
||||
|
||||
impl Future for ServeFuture {
|
||||
type Output = io::Result<()>;
|
||||
impl<T> Future for ServeFuture<T> {
|
||||
type Output = T;
|
||||
|
||||
#[inline]
|
||||
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
|
||||
@ -576,9 +572,7 @@ mod tests {
|
||||
|
||||
// router
|
||||
serve(TcpListener::bind(addr).await.unwrap(), router.clone());
|
||||
serve(tcp_nodelay_listener().await, router.clone())
|
||||
.await
|
||||
.unwrap();
|
||||
serve(tcp_nodelay_listener().await, router.clone()).await;
|
||||
#[cfg(unix)]
|
||||
serve(UnixListener::bind("").unwrap(), router.clone());
|
||||
|
||||
@ -733,8 +727,7 @@ mod tests {
|
||||
let server_task = async {
|
||||
serve(ReadyListener(Some(server)), Router::new())
|
||||
.with_graceful_shutdown(tokio::time::sleep(Duration::from_secs(1)))
|
||||
.await
|
||||
.unwrap();
|
||||
.await;
|
||||
};
|
||||
|
||||
tokio::time::timeout(Duration::from_secs(timeout + 2), server_task)
|
||||
@ -754,9 +747,7 @@ mod tests {
|
||||
client.write_all(req.as_bytes()).await.unwrap();
|
||||
|
||||
let server_task = async {
|
||||
serve(ReadyListener(Some(server)), Router::new())
|
||||
.await
|
||||
.unwrap();
|
||||
serve(ReadyListener(Some(server)), Router::new()).await;
|
||||
};
|
||||
|
||||
let wait_for_server_to_close_conn = async {
|
||||
|
||||
@ -21,9 +21,7 @@ where
|
||||
println!("Listening on {addr}");
|
||||
|
||||
tokio::spawn(async move {
|
||||
serve(listener, Shared::new(svc))
|
||||
.await
|
||||
.expect("server error")
|
||||
serve(listener, Shared::new(svc)).await;
|
||||
});
|
||||
|
||||
addr
|
||||
|
||||
@ -19,7 +19,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
println!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn handler() -> Result<(), AppError> {
|
||||
|
||||
@ -26,7 +26,7 @@ async fn main() {
|
||||
|
||||
// run it
|
||||
println!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn handler() -> Html<&'static str> {
|
||||
|
||||
@ -56,7 +56,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn websocket_handler(
|
||||
|
||||
@ -23,7 +23,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
fn app() -> Router {
|
||||
|
||||
@ -34,7 +34,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
// middleware that shows how to consume the request body upfront
|
||||
|
||||
@ -41,7 +41,7 @@ async fn main() {
|
||||
async fn serve(app: Router, port: u16) {
|
||||
let addr = SocketAddr::from(([127, 0, 0, 1], port));
|
||||
let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn html() -> impl IntoResponse {
|
||||
|
||||
@ -32,5 +32,5 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
@ -32,7 +32,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn handler(Path(params): Path<Params>) -> impl IntoResponse {
|
||||
|
||||
@ -69,7 +69,7 @@ async fn main() {
|
||||
|
||||
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();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
|
||||
@ -83,7 +83,7 @@ async fn main() {
|
||||
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
|
||||
tracing::debug!("listening on {addr}");
|
||||
let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn create_user(
|
||||
|
||||
@ -86,7 +86,7 @@ async fn main() {
|
||||
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
|
||||
tracing::debug!("listening on {addr}");
|
||||
let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn create_user(
|
||||
|
||||
@ -85,7 +85,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
#[derive(Default, Clone)]
|
||||
|
||||
@ -26,7 +26,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
fn app() -> Router {
|
||||
|
||||
@ -33,7 +33,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn handler() -> Html<&'static str> {
|
||||
|
||||
@ -48,8 +48,7 @@ async fn main() {
|
||||
// Run the server with graceful shutdown
|
||||
axum::serve(listener, app)
|
||||
.with_graceful_shutdown(shutdown_signal())
|
||||
.await
|
||||
.unwrap();
|
||||
.await;
|
||||
}
|
||||
|
||||
async fn shutdown_signal() {
|
||||
|
||||
@ -17,7 +17,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
println!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app()).await.unwrap();
|
||||
axum::serve(listener, app()).await;
|
||||
}
|
||||
|
||||
// GET routes will also be called for HEAD requests but will have the response body removed.
|
||||
|
||||
@ -16,7 +16,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
println!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn handler() -> Html<&'static str> {
|
||||
|
||||
@ -73,7 +73,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn protected(claims: Claims) -> Result<String, AuthError> {
|
||||
|
||||
@ -78,7 +78,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
type SharedState = Arc<RwLock<AppState>>;
|
||||
|
||||
@ -50,7 +50,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("Listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app(client)).await.unwrap();
|
||||
axum::serve(listener, app(client)).await;
|
||||
}
|
||||
|
||||
// defining routes and state
|
||||
|
||||
@ -38,7 +38,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn show_form() -> Html<&'static str> {
|
||||
|
||||
@ -77,7 +77,7 @@ async fn main() {
|
||||
.unwrap()
|
||||
);
|
||||
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
|
||||
@ -33,7 +33,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
|
||||
@ -35,7 +35,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn print_request_response(
|
||||
|
||||
@ -45,7 +45,7 @@ async fn start_main_server() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn start_metrics_server() {
|
||||
@ -56,7 +56,7 @@ async fn start_metrics_server() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
|
||||
@ -29,7 +29,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
// basic handler that responds with a static string
|
||||
|
||||
@ -72,7 +72,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
println!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn handler() -> Html<&'static str> {
|
||||
|
||||
@ -47,7 +47,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn stream_reqwest_response(State(client): State<Client>) -> Response {
|
||||
|
||||
@ -34,7 +34,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
println!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn handler(State(client): State<Client>, mut req: Request) -> Result<Response, StatusCode> {
|
||||
@ -63,5 +63,5 @@ async fn server() {
|
||||
.await
|
||||
.unwrap();
|
||||
println!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
@ -20,7 +20,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
println!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
fn root() -> Router {
|
||||
|
||||
@ -57,7 +57,7 @@ async fn main() {
|
||||
// run it with hyper
|
||||
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();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
// we can extract the connection pool with `State`
|
||||
|
||||
@ -39,7 +39,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
fn app() -> Router {
|
||||
@ -89,7 +89,7 @@ mod tests {
|
||||
// Retrieve the port assigned to us by the OS
|
||||
let port = listener.local_addr().unwrap().port();
|
||||
tokio::spawn(async {
|
||||
axum::serve(listener, app()).await.unwrap();
|
||||
axum::serve(listener, app()).await;
|
||||
});
|
||||
// Returns address (e.g. http://127.0.0.1{random_port})
|
||||
format!("http://{host}:{port}")
|
||||
|
||||
@ -111,7 +111,5 @@ async fn serve(app: Router, port: u16) {
|
||||
let addr = SocketAddr::from(([127, 0, 0, 1], port));
|
||||
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();
|
||||
axum::serve(listener, app.layer(TraceLayer::new_for_http())).await;
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
// Handler that streams the request body to a file.
|
||||
|
||||
@ -44,7 +44,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
println!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn handler_home(State(state): State<Arc<AppState>>) -> Result<Html<String>, StatusCode> {
|
||||
|
||||
@ -32,7 +32,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
fn app() -> Router {
|
||||
|
||||
@ -21,7 +21,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
println!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app()).await.unwrap();
|
||||
axum::serve(listener, app()).await;
|
||||
}
|
||||
|
||||
fn app() -> Router {
|
||||
|
||||
@ -29,7 +29,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app()).await.unwrap();
|
||||
axum::serve(listener, app()).await;
|
||||
}
|
||||
|
||||
/// Having a function that produces our app makes it easy to call it from tests
|
||||
@ -132,7 +132,7 @@ mod tests {
|
||||
let addr = listener.local_addr().unwrap();
|
||||
|
||||
tokio::spawn(async move {
|
||||
axum::serve(listener, app()).await.unwrap();
|
||||
axum::serve(listener, app()).await;
|
||||
});
|
||||
|
||||
let client =
|
||||
|
||||
@ -133,6 +133,5 @@ where
|
||||
tracing::debug!("listening on {addr}");
|
||||
axum::serve(listener, redirect.into_make_service())
|
||||
.with_graceful_shutdown(signal)
|
||||
.await
|
||||
.unwrap();
|
||||
.await;
|
||||
}
|
||||
|
||||
@ -97,7 +97,5 @@ async fn redirect_http_to_https(ports: Ports) {
|
||||
let addr = SocketAddr::from(([127, 0, 0, 1], ports.http));
|
||||
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();
|
||||
axum::serve(listener, redirect.into_make_service()).await;
|
||||
}
|
||||
|
||||
@ -72,7 +72,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
// The query parameters for todos index
|
||||
|
||||
@ -44,7 +44,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
type ConnectionPool = Pool<PostgresConnectionManager<NoTls>>;
|
||||
|
||||
@ -49,7 +49,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
type ConnectionPool = bb8::Pool<redis::Client>;
|
||||
|
||||
@ -87,7 +87,7 @@ async fn main() {
|
||||
// run it
|
||||
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();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
async fn handler() -> Html<&'static str> {
|
||||
|
||||
@ -52,7 +52,7 @@ mod unix {
|
||||
.route("/", get(handler))
|
||||
.into_make_service_with_connect_info::<UdsConnectInfo>();
|
||||
|
||||
axum::serve(uds, app).await.unwrap();
|
||||
axum::serve(uds, app).await;
|
||||
});
|
||||
|
||||
let stream = TokioIo::new(UnixStream::connect(path).await.unwrap());
|
||||
|
||||
@ -39,7 +39,7 @@ async fn main() {
|
||||
// run it
|
||||
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();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
fn app() -> Router {
|
||||
|
||||
@ -32,7 +32,7 @@ async fn main() {
|
||||
.await
|
||||
.unwrap();
|
||||
tracing::debug!("listening on {}", listener.local_addr().unwrap());
|
||||
axum::serve(listener, app).await.unwrap();
|
||||
axum::serve(listener, app).await;
|
||||
}
|
||||
|
||||
fn app() -> Router {
|
||||
|
||||
@ -73,8 +73,7 @@ async fn main() {
|
||||
listener,
|
||||
app.into_make_service_with_connect_info::<SocketAddr>(),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
.await;
|
||||
}
|
||||
|
||||
/// The handler for the HTTP request (this gets called when the HTTP request lands at the start
|
||||
|
||||
Loading…
Reference in New Issue
Block a user