Skip to content

Commit 654cf6b

Browse files
committed
upgrade to axum 0.6
1 parent b39943e commit 654cf6b

File tree

7 files changed

+82
-53
lines changed

7 files changed

+82
-53
lines changed

Cargo.lock

Lines changed: 38 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ iron = "0.6"
9191
router = "0.6"
9292

9393
# axum dependencies
94-
axum = "0.5.17"
94+
axum = "0.6.1"
95+
axum-extra = "0.4.2"
9596
hyper = { version = "0.14.15", default-features = false }
9697
tower = "0.4.11"
9798
tower-service = "0.3.2"

src/test/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ impl TestFrontend {
587587
.unwrap()
588588
.serve(
589589
axum_app
590-
.fallback(
590+
.fallback_service(
591591
build_strangler_service(iron_server.socket)
592592
.expect("could not build strangler service"),
593593
)

src/web/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ pub fn start_web_server(addr: Option<&str>, context: &dyn Context) -> Result<(),
514514
axum::Server::bind(&axum_addr)
515515
.serve(
516516
build_axum_app(context, template_data)?
517-
.fallback(build_strangler_service(iron_server.socket)?)
517+
.fallback_service(build_strangler_service(iron_server.socket)?)
518518
.into_make_service(),
519519
)
520520
.await?;

src/web/routes.rs

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,32 @@ use axum::{
66
handler::Handler as AxumHandler, middleware, response::Redirect, routing::get,
77
routing::MethodRouter, Router as AxumRouter,
88
};
9+
use axum_extra::routing::RouterExt;
910
use iron::middleware::Handler;
1011
use router::Router as IronRouter;
1112
use std::{borrow::Cow, collections::HashSet, convert::Infallible};
1213
use tracing::instrument;
1314

1415
#[instrument(skip_all)]
15-
fn get_static<H, T, B>(handler: H) -> MethodRouter<B, Infallible>
16+
fn get_static<H, T, S, B>(handler: H) -> MethodRouter<S, B, Infallible>
1617
where
17-
H: AxumHandler<T, B>,
18+
H: AxumHandler<T, S, B>,
1819
B: Send + 'static + hyper::body::HttpBody,
1920
T: 'static,
21+
S: Clone + Send + Sync + 'static,
2022
{
2123
get(handler).route_layer(middleware::from_fn(|request, next| async {
2224
request_recorder(request, next, Some("static resource")).await
2325
}))
2426
}
2527

2628
#[instrument(skip_all)]
27-
fn get_internal<H, T, B>(handler: H) -> MethodRouter<B, Infallible>
29+
fn get_internal<H, T, S, B>(handler: H) -> MethodRouter<S, B, Infallible>
2830
where
29-
H: AxumHandler<T, B>,
31+
H: AxumHandler<T, S, B>,
3032
B: Send + 'static + hyper::body::HttpBody,
3133
T: 'static,
34+
S: Clone + Send + Sync + 'static,
3235
{
3336
get(handler).route_layer(middleware::from_fn(|request, next| async {
3437
request_recorder(request, next, None).await
@@ -57,89 +60,89 @@ pub(super) fn build_axum_routes() -> AxumRouter {
5760
"/opensearch.xml",
5861
get_static(|| async { Redirect::permanent("/-/static/opensearch.xml") }),
5962
)
60-
.route(
63+
.route_with_tsr(
6164
"/sitemap.xml",
6265
get_internal(super::sitemap::sitemapindex_handler),
6366
)
64-
.route(
67+
.route_with_tsr(
6568
"/-/sitemap/:letter/sitemap.xml",
6669
get_internal(super::sitemap::sitemap_handler),
6770
)
68-
.route(
71+
.route_with_tsr(
6972
"/about/builds",
7073
get_internal(super::sitemap::about_builds_handler),
7174
)
72-
.route(
75+
.route_with_tsr(
7376
"/about/metrics",
7477
get_internal(super::metrics::metrics_handler),
7578
)
76-
.route("/about", get_internal(super::sitemap::about_handler))
77-
.route(
79+
.route_with_tsr("/about", get_internal(super::sitemap::about_handler))
80+
.route_with_tsr(
7881
"/about/:subpage",
7982
get_internal(super::sitemap::about_handler),
8083
)
8184
.route("/", get_internal(super::releases::home_page))
82-
.route(
85+
.route_with_tsr(
8386
"/releases",
8487
get_internal(super::releases::recent_releases_handler),
8588
)
86-
.route(
89+
.route_with_tsr(
8790
"/releases/recent/:page",
8891
get_internal(super::releases::recent_releases_handler),
8992
)
90-
.route(
93+
.route_with_tsr(
9194
"/releases/stars",
9295
get_internal(super::releases::releases_by_stars_handler),
9396
)
94-
.route(
97+
.route_with_tsr(
9598
"/releases/stars/:page",
9699
get_internal(super::releases::releases_by_stars_handler),
97100
)
98-
.route(
101+
.route_with_tsr(
99102
"/releases/recent-failures",
100103
get_internal(super::releases::releases_recent_failures_handler),
101104
)
102-
.route(
105+
.route_with_tsr(
103106
"/releases/recent-failures/:page",
104107
get_internal(super::releases::releases_recent_failures_handler),
105108
)
106-
.route(
109+
.route_with_tsr(
107110
"/releases/failures",
108111
get_internal(super::releases::releases_failures_by_stars_handler),
109112
)
110-
.route(
113+
.route_with_tsr(
111114
"/releases/failures/:page",
112115
get_internal(super::releases::releases_failures_by_stars_handler),
113116
)
114-
.route(
117+
.route_with_tsr(
115118
"/crate/:name",
116119
get_internal(super::crate_details::crate_details_handler),
117120
)
118-
.route(
121+
.route_with_tsr(
119122
"/crate/:name/:version",
120123
get_internal(super::crate_details::crate_details_handler),
121124
)
122-
.route(
125+
.route_with_tsr(
123126
"/releases/feed",
124127
get_static(super::releases::releases_feed_handler),
125128
)
126-
.route(
129+
.route_with_tsr(
127130
"/releases/:owner",
128131
get_internal(super::releases::owner_handler),
129132
)
130-
.route(
133+
.route_with_tsr(
131134
"/releases/:owner/:page",
132135
get_internal(super::releases::owner_handler),
133136
)
134-
.route(
137+
.route_with_tsr(
135138
"/releases/activity",
136139
get_internal(super::releases::activity_handler),
137140
)
138-
.route(
141+
.route_with_tsr(
139142
"/releases/search",
140143
get_internal(super::releases::search_handler),
141144
)
142-
.route(
145+
.route_with_tsr(
143146
"/releases/queue",
144147
get_internal(super::releases::build_queue_handler),
145148
)

src/web/statics.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ pub(crate) async fn static_handler(Path(path): Path<String>) -> AxumResult<impl
3030
let text_css: Mime = "text/css".parse().unwrap();
3131

3232
Ok(match path.as_str() {
33-
"/vendored.css" => build_response(VENDORED_CSS, text_css),
34-
"/style.css" => build_response(STYLE_CSS, text_css),
35-
"/rustdoc.css" => build_response(RUSTDOC_CSS, text_css),
36-
"/rustdoc-2021-12-05.css" => build_response(RUSTDOC_2021_12_05_CSS, text_css),
37-
file => match serve_file(&file[1..]).await {
33+
"vendored.css" => build_response(VENDORED_CSS, text_css),
34+
"style.css" => build_response(STYLE_CSS, text_css),
35+
"rustdoc.css" => build_response(RUSTDOC_CSS, text_css),
36+
"rustdoc-2021-12-05.css" => build_response(RUSTDOC_2021_12_05_CSS, text_css),
37+
file => match serve_file(file).await {
3838
Ok(response) => response.into_response(),
3939
Err(err) => return Err(err),
4040
},

src/web/strangler.rs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ use std::{
2020
task::{Context, Poll},
2121
};
2222

23-
use axum::{
24-
extract::RequestParts,
25-
http::{uri::Authority, Uri},
26-
};
23+
use axum::http::{uri::Authority, Uri};
2724
use tower_service::Service;
2825

2926
/// Service that forwards all requests to another service
@@ -33,7 +30,7 @@ use tower_service::Service;
3330
/// let strangler_svc = StranglerService::new(
3431
/// axum::http::uri::Authority::from_static("127.0.0.1:3333"),
3532
/// );
36-
/// let router = axum::Router::new().fallback(strangler_svc);
33+
/// let router = axum::Router::new().fallback_service(strangler_svc);
3734
/// axum::Server::bind(&"127.0.0.1:0".parse()?)
3835
/// .serve(router.into_make_service())
3936
/// # .with_graceful_shutdown(async {
@@ -90,13 +87,9 @@ impl Service<axum::http::Request<axum::body::Body>> for StranglerService {
9087
async fn forward_call_to_strangled(
9188
http_client: hyper::Client<hyper::client::HttpConnector>,
9289
inner: Arc<InnerStranglerService>,
93-
req: axum::http::Request<axum::body::Body>,
90+
mut req: axum::http::Request<axum::body::Body>,
9491
) -> Result<axum::response::Response, Infallible> {
9592
tracing::debug!("handling a request");
96-
let mut request_parts = RequestParts::new(req);
97-
let req: Result<axum::http::Request<axum::body::Body>, _> = request_parts.extract().await;
98-
let mut req = req.unwrap();
99-
10093
let uri: Uri = {
10194
// Not really anything to do, because this could just not be a websocket
10295
// request.
@@ -145,13 +138,13 @@ mod tests {
145138

146139
#[tokio::test]
147140
async fn can_be_used_as_fallback() {
148-
let router = Router::new().fallback(make_svc());
141+
let router = Router::new().fallback_service(make_svc());
149142
axum::Server::bind(&"0.0.0.0:0".parse().unwrap()).serve(router.into_make_service());
150143
}
151144

152145
#[tokio::test]
153146
async fn can_be_used_for_a_route() {
154-
let router = Router::new().route("/api", make_svc());
147+
let router = Router::new().route_service("/api", make_svc());
155148
axum::Server::bind(&"0.0.0.0:0".parse().unwrap()).serve(router.into_make_service());
156149
}
157150

@@ -204,7 +197,7 @@ mod tests {
204197
});
205198

206199
let background_strangler_handle = tokio::spawn(async move {
207-
let router = Router::new().fallback(strangler_svc);
200+
let router = Router::new().fallback_service(strangler_svc);
208201
axum::Server::from_tcp(strangler_tcp)
209202
.unwrap()
210203
.serve(router.into_make_service())

0 commit comments

Comments
 (0)