@@ -545,7 +545,7 @@ impl_webpage! {
545545
546546pub fn search_handler ( req : & mut Request ) -> IronResult < Response > {
547547 let url = req. url . as_ref ( ) ;
548- let params: HashMap < _ , _ > = url. query_pairs ( ) . collect ( ) ;
548+ let mut params: HashMap < _ , _ > = url. query_pairs ( ) . collect ( ) ;
549549 let query = params
550550 . get ( "query" )
551551 . map ( |q| q. to_string ( ) )
@@ -555,7 +555,7 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
555555
556556 // check if I am feeling lucky button pressed and redirect user to crate page
557557 // if there is a match. Also check for paths to items within crates.
558- if params. contains_key ( "i-am-feeling-lucky" ) || query. contains ( "::" ) {
558+ if params. remove ( "i-am-feeling-lucky" ) . is_some ( ) || query. contains ( "::" ) {
559559 // redirect to a random crate if query is empty
560560 if query. is_empty ( ) {
561561 return redirect_to_random_crate ( req, & mut conn) ;
@@ -571,17 +571,12 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
571571 None => query. clone ( ) ,
572572 } ;
573573
574- queries. extend (
575- params
576- . iter ( )
577- . filter ( |( k, _) | !matches ! ( k. as_ref( ) , "i-am-feeling-lucky" | "query" ) )
578- . map ( |( k, v) | ( k. as_ref ( ) , v. as_ref ( ) ) ) ,
579- ) ;
580-
581574 // since we never pass a version into `match_version` here, we'll never get
582575 // `MatchVersion::Exact`, so the distinction between `Exact` and `Semver` doesn't
583576 // matter
584577 if let Ok ( matchver) = match_version ( & mut conn, & krate, None ) {
578+ params. remove ( "query" ) ;
579+ queries. extend ( params. iter ( ) . map ( |( k, v) | ( k. as_ref ( ) , v. as_ref ( ) ) ) ) ;
585580 let ( version, _) = matchver. version . into_parts ( ) ;
586581 let krate = matchver. corrected_name . unwrap_or ( krate) ;
587582
0 commit comments