File tree Expand file tree Collapse file tree 1 file changed +14
-9
lines changed Expand file tree Collapse file tree 1 file changed +14
-9
lines changed Original file line number Diff line number Diff line change @@ -138,19 +138,24 @@ impl CratesfyiHandler {
138138
139139impl Handler for CratesfyiHandler {
140140 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+
141152 // try serving shared rustdoc resources first, then router, then db/static file handler
142153 // return 404 if none of them return Ok
143154 self . shared_resource_handler
144155 . 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) ) )
154159 . or_else ( |e| {
155160 let err = if let Some ( err) = e. error . downcast :: < error:: Nope > ( ) {
156161 * err
You can’t perform that action at this time.
0 commit comments