Migrate to axum 0.8

This commit is contained in:
Antoine Gersant 2025-01-13 21:23:30 -08:00
parent 055a81e6f9
commit 466bbf5cf3
6 changed files with 97 additions and 105 deletions

142
Cargo.lock generated
View file

@ -1,6 +1,6 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
version = 4
[[package]]
name = "addr2line"
@ -65,6 +65,16 @@ version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
[[package]]
name = "assert-json-diff"
version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12"
dependencies = [
"serde",
"serde_json",
]
[[package]]
name = "async-compression"
version = "0.4.12"
@ -78,17 +88,6 @@ dependencies = [
"tokio",
]
[[package]]
name = "async-trait"
version = "0.1.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.72",
]
[[package]]
name = "auto-future"
version = "1.0.0"
@ -103,15 +102,15 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
[[package]]
name = "axum"
version = "0.7.5"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf"
checksum = "6d6fd624c75e18b3b4c6b9caf42b1afe24437daaee904069137d8bab077be8b8"
dependencies = [
"async-trait",
"axum-core",
"bytes",
"form_urlencoded",
"futures-util",
"http 1.1.0",
"http 1.2.0",
"http-body",
"http-body-util",
"hyper",
@ -127,9 +126,9 @@ dependencies = [
"serde_json",
"serde_path_to_error",
"serde_urlencoded",
"sync_wrapper 1.0.1",
"sync_wrapper",
"tokio",
"tower 0.4.13",
"tower 0.5.2",
"tower-layer",
"tower-service",
"tracing",
@ -137,20 +136,19 @@ dependencies = [
[[package]]
name = "axum-core"
version = "0.4.3"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3"
checksum = "df1362f362fd16024ae199c1970ce98f9661bf5ef94b9808fee734bc3698b733"
dependencies = [
"async-trait",
"bytes",
"futures-util",
"http 1.1.0",
"http 1.2.0",
"http-body",
"http-body-util",
"mime",
"pin-project-lite",
"rustversion",
"sync_wrapper 0.1.2",
"sync_wrapper",
"tower-layer",
"tower-service",
"tracing",
@ -158,32 +156,30 @@ dependencies = [
[[package]]
name = "axum-extra"
version = "0.9.3"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0be6ea09c9b96cb5076af0de2e383bd2bc0c18f827cf1967bdd353e0b910d733"
checksum = "460fc6f625a1f7705c6cf62d0d070794e94668988b1c38111baeec177c715f7b"
dependencies = [
"axum",
"axum-core",
"bytes",
"futures-util",
"headers",
"http 1.1.0",
"http 1.2.0",
"http-body",
"http-body-util",
"mime",
"pin-project-lite",
"serde",
"tower 0.4.13",
"tower 0.5.2",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "axum-range"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1c30398a7f716ebdd7f3c8a4f7a7a6df48a30e002007fd57b2a7a00fac864bd"
version = "0.5.0"
source = "git+https://github.com/agersant/axum-range?branch=axum-0.8#71028e28d09a10b9c85fa4db16ae96dc299f68f4"
dependencies = [
"axum",
"axum-extra",
@ -196,16 +192,18 @@ dependencies = [
[[package]]
name = "axum-test"
version = "15.7.0"
version = "17.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c13fee69ea6d727350c4fcb5f9100fda3b6b73bfae33da6b4acd3b6934f6e73"
checksum = "fb67e8e9ef63a57d8f494ce291b92a215413ab9752a12bbf7de4969acb7b8cdd"
dependencies = [
"anyhow",
"assert-json-diff",
"auto-future",
"axum",
"bytes",
"bytesize",
"cookie",
"http 1.1.0",
"http 1.2.0",
"http-body-util",
"hyper",
"hyper-util",
@ -218,7 +216,7 @@ dependencies = [
"serde_urlencoded",
"smallvec",
"tokio",
"tower 0.5.0",
"tower 0.5.2",
"url",
]
@ -352,9 +350,15 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
[[package]]
name = "bytes"
version = "1.7.1"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50"
checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
[[package]]
name = "bytesize"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc"
[[package]]
name = "camino"
@ -870,7 +874,7 @@ dependencies = [
"base64 0.21.7",
"bytes",
"headers-core",
"http 1.1.0",
"http 1.2.0",
"httpdate",
"mime",
"sha1",
@ -882,7 +886,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4"
dependencies = [
"http 1.1.0",
"http 1.2.0",
]
[[package]]
@ -919,9 +923,9 @@ dependencies = [
[[package]]
name = "http"
version = "1.1.0"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea"
dependencies = [
"bytes",
"fnv",
@ -935,7 +939,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
dependencies = [
"bytes",
"http 1.1.0",
"http 1.2.0",
]
[[package]]
@ -946,7 +950,7 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
dependencies = [
"bytes",
"futures-util",
"http 1.1.0",
"http 1.2.0",
"http-body",
"pin-project-lite",
]
@ -971,14 +975,14 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "hyper"
version = "1.4.1"
version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05"
checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0"
dependencies = [
"bytes",
"futures-channel",
"futures-util",
"http 1.1.0",
"http 1.2.0",
"http-body",
"httparse",
"httpdate",
@ -998,7 +1002,7 @@ dependencies = [
"bytes",
"futures-channel",
"futures-util",
"http 1.1.0",
"http 1.2.0",
"http-body",
"hyper",
"pin-project-lite",
@ -1274,9 +1278,9 @@ dependencies = [
[[package]]
name = "libc"
version = "0.2.155"
version = "0.2.169"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
[[package]]
name = "libredox"
@ -1340,9 +1344,9 @@ dependencies = [
[[package]]
name = "matchit"
version = "0.7.3"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
[[package]]
name = "memchr"
@ -1764,7 +1768,7 @@ dependencies = [
"enum-map",
"getopts",
"headers",
"http 1.1.0",
"http 1.2.0",
"icu_collator",
"id3",
"image",
@ -1800,7 +1804,7 @@ dependencies = [
"tokio",
"tokio-util",
"toml 0.8.19",
"tower 0.5.0",
"tower 0.5.2",
"tower-http",
"trie-rs",
"unicase",
@ -2564,12 +2568,6 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "sync_wrapper"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
[[package]]
name = "sync_wrapper"
version = "1.0.1"
@ -2690,9 +2688,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
version = "1.40.0"
version = "1.43.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998"
checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e"
dependencies = [
"backtrace",
"bytes",
@ -2706,9 +2704,9 @@ dependencies = [
[[package]]
name = "tokio-macros"
version = "2.4.0"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
dependencies = [
"proc-macro2",
"quote",
@ -2784,36 +2782,36 @@ dependencies = [
"tokio",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "tower"
version = "0.5.0"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36b837f86b25d7c0d7988f00a54e74739be6477f2aac6201b8f429a7569991b7"
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
dependencies = [
"futures-core",
"futures-util",
"pin-project-lite",
"sync_wrapper 0.1.2",
"sync_wrapper",
"tokio",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "tower-http"
version = "0.5.2"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697"
dependencies = [
"async-compression",
"bitflags 2.6.0",
"bytes",
"futures-core",
"futures-util",
"http 1.1.0",
"http 1.2.0",
"http-body",
"http-body-util",
"http-range-header",
@ -2837,9 +2835,9 @@ checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
[[package]]
name = "tower-service"
version = "0.3.2"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
[[package]]
name = "tracing"

View file

@ -13,8 +13,8 @@ lto = "thin"
[dependencies]
ape = "0.5"
axum-extra = { version = "0.9.3", features = ["typed-header"] }
axum-range = "0.4.0"
axum-extra = { version = "0.10.0", features = ["typed-header"] }
axum-range = { git = "https://github.com/agersant/axum-range", branch = "axum-0.8" }
bitcode = { version = "0.6.3", features = ["serde"] }
branca = "0.10.1"
chumsky = "0.9.3"
@ -56,8 +56,8 @@ thiserror = "1.0.62"
tokio = { version = "1.39", features = ["macros", "rt-multi-thread"] }
tokio-util = { version = "0.7.11", features = ["io"] }
toml = "0.8.19"
tower = { version = "0.5.0" }
tower-http = { version = "0.5.2", features = [
tower = { version = "0.5.2" }
tower-http = { version = "0.6.2", features = [
"compression-gzip",
"fs",
"normalize-path",
@ -67,7 +67,7 @@ unicase = "2.7.0"
ureq = { version = "2.10.0", default-features = false, features = ["tls"] }
[dependencies.axum]
version = "0.7.5"
version = "0.8.1"
default-features = false
features = ["http1", "json", "tokio", "tower-log", "query"]
@ -95,6 +95,6 @@ embed-resource = "2.4.2"
winres = "0.1"
[dev-dependencies]
axum-test = "15.7"
axum-test = "17.0"
bytes = "1.7.1"
percent-encoding = "2.2"

View file

@ -21,14 +21,14 @@ pub fn make_router(app: App) -> NormalizePath<Router> {
let swagger = ServeDir::new(&app.swagger_dir_path);
let static_files = Router::new()
.nest_service("/", ServeDir::new(&app.web_dir_path))
.fallback_service(ServeDir::new(&app.web_dir_path))
.layer(CompressionLayer::new());
let router = Router::new()
.nest("/api", api::router())
.with_state(app.clone())
.nest_service("/swagger", swagger)
.nest("/", static_files)
.fallback_service(static_files)
.layer(logger::LogLayer::new());
NormalizePathLayer::trim_trailing_slash().layer(router)

View file

@ -37,44 +37,44 @@ pub fn router() -> Router<App> {
.route("/index_status", get(get_index_status))
// User management
.route("/user", post(post_user))
.route("/user/:name", delete(delete_user))
.route("/user/:name", put(put_user))
.route("/user/{name}", delete(delete_user))
.route("/user/{name}", put(put_user))
.route("/users", get(get_users))
// File browser
.route("/browse", get(get_browse_root))
.route("/browse/*path", get(get_browse))
.route("/browse/{*path}", get(get_browse))
.route("/flatten", get(get_flatten_root))
.route("/flatten/*path", get(get_flatten))
.route("/flatten/{*path}", get(get_flatten))
// Semantic
.route("/albums", get(get_albums))
.route("/albums/recent", get(get_recent_albums))
.route("/albums/random", get(get_random_albums))
.route("/artists", get(get_artists))
.route("/artists/:artist", get(get_artist))
.route("/artists/:artists/albums/:name", get(get_album))
.route("/artists/{artist}", get(get_artist))
.route("/artists/{artists}/albums/{name}", get(get_album))
.route("/genres", get(get_genres))
.route("/genres/:genre", get(get_genre))
.route("/genres/:genre/albums", get(get_genre_albums))
.route("/genres/:genre/artists", get(get_genre_artists))
.route("/genres/:genre/songs", get(get_genre_songs))
.route("/genres/{genre}", get(get_genre))
.route("/genres/{genre}/albums", get(get_genre_albums))
.route("/genres/{genre}/artists", get(get_genre_artists))
.route("/genres/{genre}/songs", get(get_genre_songs))
.route("/random", get(get_random_albums)) // Deprecated
.route("/recent", get(get_recent_albums)) // Deprecated
// Search
.route("/search/*query", get(get_search))
.route("/search/{*query}", get(get_search))
// Playlist management
.route("/playlists", get(get_playlists))
.route("/playlist/:name", put(put_playlist))
.route("/playlist/:name", get(get_playlist))
.route("/playlist/:name", delete(delete_playlist))
.route("/playlist/{name}", put(put_playlist))
.route("/playlist/{name}", get(get_playlist))
.route("/playlist/{name}", delete(delete_playlist))
// Media
.route("/songs", post(get_songs)) // post because of https://github.com/whatwg/fetch/issues/551
.route("/peaks/*path", get(get_peaks))
.route("/thumbnail/*path", get(get_thumbnail))
.route("/peaks/{*path}", get(get_peaks))
.route("/thumbnail/{*path}", get(get_thumbnail))
// Layers
.layer(CompressionLayer::new().quality(CompressionLevel::Fastest))
.layer(DefaultBodyLimit::max(10 * 1024 * 1024)) // 10MB
// Uncompressed
.route("/audio/*path", get(get_audio))
.route("/audio/{*path}", get(get_audio))
}
async fn get_version() -> Json<dto::Version> {

View file

@ -1,7 +1,4 @@
use axum::{
async_trait,
extract::{FromRef, FromRequestParts, Query},
};
use axum::extract::{FromRef, FromRequestParts, Query};
use headers::authorization::{Bearer, Credentials};
use http::request::Parts;
@ -21,7 +18,6 @@ impl Auth {
}
}
#[async_trait]
impl<S> FromRequestParts<S> for Auth
where
config::Manager: FromRef<S>,
@ -67,7 +63,6 @@ impl AdminRights {
}
}
#[async_trait]
impl<S> FromRequestParts<S> for AdminRights
where
config::Manager: FromRef<S>,

View file

@ -1,9 +1,8 @@
use axum::{async_trait, extract::FromRequestParts};
use axum::extract::FromRequestParts;
use http::request::Parts;
use crate::server::{error::APIError, APIMajorVersion};
#[async_trait]
impl<S> FromRequestParts<S> for APIMajorVersion
where
S: Send + Sync,