@@ -6,7 +6,8 @@ use crate::{
66 utils,
77 web:: {
88 crate_details:: CrateDetails , csp:: Csp , error:: Nope , file:: File , match_version,
9- metrics:: RenderingTimesRecorder , redirect_base, MatchSemver , MetaData ,
9+ metrics:: RenderingTimesRecorder , parse_url_with_params, redirect_base, MatchSemver ,
10+ MetaData ,
1011 } ,
1112 Config , Metrics , Storage ,
1213} ;
@@ -22,7 +23,11 @@ use lol_html::errors::RewritingError;
2223use once_cell:: sync:: Lazy ;
2324use router:: Router ;
2425use serde:: Serialize ;
25- use std:: { collections:: HashMap , fmt:: Write , path:: Path } ;
26+ use std:: {
27+ collections:: { BTreeMap , HashMap } ,
28+ fmt:: Write ,
29+ path:: Path ,
30+ } ;
2631
2732static DOC_RUST_LANG_ORG_REDIRECTS : Lazy < HashMap < & str , & str > > = Lazy :: new ( || {
2833 HashMap :: from ( [
@@ -46,21 +51,12 @@ pub fn rustdoc_redirector_handler(req: &mut Request) -> IronResult<Response> {
4651 permanent : bool ,
4752 path_in_crate : Option < & str > ,
4853 ) -> IronResult < Response > {
49- let mut queries: std:: collections:: BTreeMap <
50- std:: borrow:: Cow < ' _ , str > ,
51- std:: borrow:: Cow < ' _ , str > ,
52- > = std:: collections:: BTreeMap :: new ( ) ;
54+ let mut queries = BTreeMap :: new ( ) ;
5355 if let Some ( path) = path_in_crate {
5456 queries. insert ( "search" . into ( ) , path. into ( ) ) ;
5557 }
5658 queries. extend ( req. url . as_ref ( ) . query_pairs ( ) ) ;
57- let url = ctry ! (
58- req,
59- Url :: from_generic_url( ctry!(
60- req,
61- iron:: url:: Url :: parse_with_params( & url_str, queries)
62- ) )
63- ) ;
59+ let url = ctry ! ( req, parse_url_with_params( & url_str, queries) ) ;
6460 let ( status_code, max_age) = if permanent {
6561 ( status:: MovedPermanently , 86400 )
6662 } else {
@@ -865,8 +861,8 @@ mod test {
865861 "/dummy/0.3.0/all.html" ,
866862 web,
867863 ) ?;
868- assert_redirect ( "/dummy/0.3.0/" , & format ! ( "{}?" , base) , web) ?;
869- assert_redirect ( "/dummy/0.3.0/index.html" , & format ! ( "{}?" , base) , web) ?;
864+ assert_redirect ( "/dummy/0.3.0/" , base, web) ?;
865+ assert_redirect ( "/dummy/0.3.0/index.html" , base, web) ?;
870866 Ok ( ( ) )
871867 } ) ;
872868 }
@@ -1183,7 +1179,7 @@ mod test {
11831179 . create ( ) ?;
11841180
11851181 let web = env. frontend ( ) ;
1186- assert_redirect ( "/fake%2Dcrate" , "/fake-crate/latest/fake_crate/? " , web) ?;
1182+ assert_redirect ( "/fake%2Dcrate" , "/fake-crate/latest/fake_crate/" , web) ?;
11871183
11881184 Ok ( ( ) )
11891185 } ) ;
@@ -1213,37 +1209,37 @@ mod test {
12131209
12141210 let web = env. frontend ( ) ;
12151211
1216- assert_redirect ( "/dummy_dash" , "/dummy-dash/latest/dummy_dash/? " , web) ?;
1217- assert_redirect ( "/dummy_dash/*" , "/dummy-dash/0.2.0/dummy_dash/? " , web) ?;
1218- assert_redirect ( "/dummy_dash/0.1.0" , "/dummy-dash/0.1.0/dummy_dash/? " , web) ?;
1212+ assert_redirect ( "/dummy_dash" , "/dummy-dash/latest/dummy_dash/" , web) ?;
1213+ assert_redirect ( "/dummy_dash/*" , "/dummy-dash/0.2.0/dummy_dash/" , web) ?;
1214+ assert_redirect ( "/dummy_dash/0.1.0" , "/dummy-dash/0.1.0/dummy_dash/" , web) ?;
12191215 assert_redirect (
12201216 "/dummy-underscore" ,
1221- "/dummy_underscore/latest/dummy_underscore/? " ,
1217+ "/dummy_underscore/latest/dummy_underscore/" ,
12221218 web,
12231219 ) ?;
12241220 assert_redirect (
12251221 "/dummy-underscore/*" ,
1226- "/dummy_underscore/0.2.0/dummy_underscore/? " ,
1222+ "/dummy_underscore/0.2.0/dummy_underscore/" ,
12271223 web,
12281224 ) ?;
12291225 assert_redirect (
12301226 "/dummy-underscore/0.1.0" ,
1231- "/dummy_underscore/0.1.0/dummy_underscore/? " ,
1227+ "/dummy_underscore/0.1.0/dummy_underscore/" ,
12321228 web,
12331229 ) ?;
12341230 assert_redirect (
12351231 "/dummy-mixed_separators" ,
1236- "/dummy_mixed-separators/latest/dummy_mixed_separators/? " ,
1232+ "/dummy_mixed-separators/latest/dummy_mixed_separators/" ,
12371233 web,
12381234 ) ?;
12391235 assert_redirect (
12401236 "/dummy_mixed_separators/*" ,
1241- "/dummy_mixed-separators/0.2.0/dummy_mixed_separators/? " ,
1237+ "/dummy_mixed-separators/0.2.0/dummy_mixed_separators/" ,
12421238 web,
12431239 ) ?;
12441240 assert_redirect (
12451241 "/dummy-mixed-separators/0.1.0" ,
1246- "/dummy_mixed-separators/0.1.0/dummy_mixed_separators/? " ,
1242+ "/dummy_mixed-separators/0.1.0/dummy_mixed_separators/" ,
12471243 web,
12481244 ) ?;
12491245
0 commit comments