@@ -95,6 +95,10 @@ impl CratesfyiHandler {
95
95
}
96
96
97
97
pub fn new ( ) -> CratesfyiHandler {
98
+ const DOC_RUST_LANG_ORG_REDIRECTS : [ & str ; 5 ] = [
99
+ "alloc" , "core" , "proc_macro" , "std" , "test"
100
+ ] ;
101
+
98
102
let mut router = Router :: new ( ) ;
99
103
router. get ( "/" , releases:: home_page, "index" ) ;
100
104
router. get ( "/style.css" , style_css_handler, "style_css" ) ;
@@ -105,11 +109,15 @@ impl CratesfyiHandler {
105
109
router. get ( "/opensearch.xml" , opensearch_xml_handler, "opensearch_xml" ) ;
106
110
107
111
// Redirect standard library crates to rust-lang.org
108
- router. get ( "/alloc" , rustdoc:: RustLangRedirector :: new ( "alloc" ) , "alloc" ) ;
109
- router. get ( "/core" , rustdoc:: RustLangRedirector :: new ( "core" ) , "core" ) ;
110
- router. get ( "/proc_macro" , rustdoc:: RustLangRedirector :: new ( "proc_macro" ) , "proc_macro" ) ;
111
- router. get ( "/std" , rustdoc:: RustLangRedirector :: new ( "std" ) , "std" ) ;
112
- router. get ( "/test" , rustdoc:: RustLangRedirector :: new ( "test" ) , "test" ) ;
112
+ for redirect in DOC_RUST_LANG_ORG_REDIRECTS . iter ( ) {
113
+ let redirector = rustdoc:: RustLangRedirector :: new ( redirect) ;
114
+ router. get ( & format ! ( "/{}" , redirect) , redirector, redirect) ;
115
+
116
+ // allow trailing slashes
117
+ let redirector = rustdoc:: RustLangRedirector :: new ( redirect) ;
118
+ let target = format ! ( "/{}/" , redirect) ;
119
+ router. get ( & target, redirector, & target[ 1 ..] ) ;
120
+ }
113
121
114
122
router. get ( "/releases" , releases:: recent_releases_handler, "releases" ) ;
115
123
router. get ( "/releases/feed" ,
0 commit comments