From e1e544267d749ee2fda0b367f41e2c8d748ab61a Mon Sep 17 00:00:00 2001 From: Sandro Eiler Date: Fri, 15 Dec 2023 23:13:00 +0100 Subject: [PATCH] refactor: migrate to axum 0.7 --- Cargo.lock | 164 ++++++++++++++++++++++++++++++++++++------ Cargo.toml | 6 +- src/lib.rs | 14 ++-- src/main.rs | 8 +-- tests/health_check.rs | 10 +-- 5 files changed, 159 insertions(+), 43 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a64b205..0108157 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -36,18 +36,19 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "axum" -version = "0.6.20" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +checksum = "202651474fe73c62d9e0a56c6133f7a0ff1dc1c8cf7a5b03381af2a26553ac9d" dependencies = [ "async-trait", "axum-core", - "bitflags", "bytes", "futures-util", - "http", - "http-body", - "hyper", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.0.1", + "hyper-util", "itoa", "matchit", "memchr", @@ -68,17 +69,20 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +checksum = "77cb22c689c44d4c07b0ab44ebc25d69d8ae601a2f28fb8d672d344178fa17aa" dependencies = [ "async-trait", "bytes", "futures-util", - "http", - "http-body", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", "mime", + "pin-project-lite", "rustversion", + "sync_wrapper", "tower-layer", "tower-service", ] @@ -159,6 +163,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "errno" version = "0.3.1" @@ -275,8 +285,27 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", - "indexmap", + "http 0.2.9", + "indexmap 1.9.3", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d308f63daf4181410c242d34c11f928dcb3aa105852019e043c9d1f4e4368a" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 1.0.0", + "indexmap 2.1.0", "slab", "tokio", "tokio-util", @@ -289,6 +318,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + [[package]] name = "hermit-abi" version = "0.3.1" @@ -306,6 +341,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.5" @@ -313,7 +359,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", - "http", + "http 0.2.9", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.0.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" +dependencies = [ + "bytes", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", "pin-project-lite", ] @@ -339,9 +408,9 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.3.20", + "http 0.2.9", + "http-body 0.4.5", "httparse", "httpdate", "itoa", @@ -353,6 +422,25 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403f9214f3e703236b221f1a9cd88ec8b4adfa5296de01ab96216361f4692f56" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.0", + "http 1.0.0", + "http-body 1.0.0", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "tokio", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -360,12 +448,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper", + "hyper 0.14.27", "native-tls", "tokio", "tokio-native-tls", ] +[[package]] +name = "hyper-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca339002caeb0d159cc6e023dff48e199f081e42fa039895c7c6f38b37f2e9d" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "hyper 1.0.1", + "pin-project-lite", + "socket2 0.5.4", + "tokio", + "tower", + "tower-service", + "tracing", +] + [[package]] name = "idna" version = "0.4.0" @@ -383,7 +491,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", ] [[package]] @@ -438,7 +556,7 @@ name = "learn_axum" version = "0.1.0" dependencies = [ "axum", - "hyper", + "hyper 0.14.27", "reqwest", "serde", "serde_json", @@ -703,10 +821,10 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", - "http", - "http-body", - "hyper", + "h2 0.3.20", + "http 0.2.9", + "http-body 0.4.5", + "hyper 0.14.27", "hyper-tls", "ipnet", "js-sys", diff --git a/Cargo.toml b/Cargo.toml index 5303cb5..ca694bd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,9 +20,9 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1" # serde_with = "3" # Axum -axum = { version = "0.6.20" } -# tower-http = { version = "0.4.4", features = ["fs"] } -# tower-cookies = "0.9" +axum = { version = "0.7" } +# tower-http = { version = "0.5", features = ["fs"] } +# tower-cookies = "0.10" # # Others # lazy-regex = "3" # async-trait = "0.1" diff --git a/src/lib.rs b/src/lib.rs index 4baa722..4f12082 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,15 +3,13 @@ use axum::extract::{Path, Query}; use axum::http::{Method, Uri}; use axum::response::{Html, IntoResponse, Response}; use axum::routing::{get, get_service, post, IntoMakeService}; -use axum::Server; +use axum::serve::Serve; use axum::{middleware, Json, Router}; use hyper::server::conn::AddrIncoming; use serde::Deserialize; use serde_json::{json, Value}; use std::net::SocketAddr; -use std::net::TcpListener; - -pub type App = Server>; +use tokio::net::TcpListener; #[derive(Deserialize)] struct FormData { @@ -20,15 +18,13 @@ struct FormData { } /// API routing -fn app() -> Router { +pub fn app() -> Router { Router::new() .route("/health_check", get(|| async {})) .route("/subscriptions", post(|| async {})) } /// Start the server -pub fn run(listener: TcpListener) -> hyper::Result { - let app = app(); - let server = Server::from_tcp(listener)?.serve(app.into_make_service()); - Ok(server) +pub fn run(listener: TcpListener) -> Serve, Router> { + axum::serve(listener, app().into_make_service()) } diff --git a/src/main.rs b/src/main.rs index fb1651f..a98fac2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,9 @@ use learn_axum::run; -use std::net::TcpListener; +use tokio::net::TcpListener; #[tokio::main] -async fn main() -> hyper::Result<()> { +async fn main() { let addr = format!("127.0.0.1:{}", "3000"); - let listener = TcpListener::bind(addr).expect("Unable to bind to port"); - run(listener)?.await + let listener = TcpListener::bind(addr).await.unwrap(); //.expect("Unable to bind to port"); + run(listener).await.unwrap(); } diff --git a/tests/health_check.rs b/tests/health_check.rs index 3834d5c..7c5dabe 100644 --- a/tests/health_check.rs +++ b/tests/health_check.rs @@ -1,4 +1,5 @@ -use std::net::{SocketAddr, TcpListener}; +use std::net::SocketAddr; +use tokio::net::TcpListener; struct TestApp { addr: SocketAddr, @@ -74,9 +75,10 @@ async fn subscribe_returns_a_400_when_data_is_missing() { } async fn spawn_app() -> TestApp { - let listener = TcpListener::bind("127.0.0.1:0").expect("Failed to bind to random port"); + let listener = TcpListener::bind("127.0.0.1:0").await.unwrap(); let addr = listener.local_addr().unwrap(); - let server = learn_axum::run(listener).expect("Failed to bind to address"); - tokio::spawn(server); + tokio::spawn(async move { + axum::serve(listener, learn_axum::app()).await.unwrap(); + }); TestApp { addr } }