File tree 1 file changed +14
-9
lines changed
1 file changed +14
-9
lines changed Original file line number Diff line number Diff line change @@ -138,19 +138,24 @@ impl CratesfyiHandler {
138
138
139
139
impl Handler for CratesfyiHandler {
140
140
fn handle ( & self , req : & mut Request ) -> IronResult < Response > {
141
+ fn if_404 (
142
+ e : IronError ,
143
+ handle : impl FnOnce ( ) -> IronResult < Response > ,
144
+ ) -> IronResult < Response > {
145
+ if e. response . status == Some ( status:: NotFound ) {
146
+ handle ( )
147
+ } else {
148
+ Err ( e)
149
+ }
150
+ } ;
151
+
141
152
// try serving shared rustdoc resources first, then router, then db/static file handler
142
153
// return 404 if none of them return Ok
143
154
self . shared_resource_handler
144
155
. handle ( req)
145
- . or_else ( |e| self . router_handler . handle ( req) . or ( Err ( e) ) )
146
- . or_else ( |e| {
147
- // if router fails try to serve files from database first
148
- self . database_file_handler . handle ( req) . or ( Err ( e) )
149
- } )
150
- . or_else ( |e| {
151
- // and then try static handler. if all of them fails, return 404
152
- self . static_handler . handle ( req) . or ( Err ( e) )
153
- } )
156
+ . or_else ( |e| if_404 ( e, || self . router_handler . handle ( req) ) )
157
+ . or_else ( |e| if_404 ( e, || self . database_file_handler . handle ( req) ) )
158
+ . or_else ( |e| if_404 ( e, || self . static_handler . handle ( req) ) )
154
159
. or_else ( |e| {
155
160
let err = if let Some ( err) = e. error . downcast :: < error:: Nope > ( ) {
156
161
* err
You can’t perform that action at this time.
0 commit comments