@@ -568,7 +568,7 @@ impl_webpage! {
568568
569569pub fn search_handler ( req : & mut Request ) -> IronResult < Response > {
570570 let url = req. url . as_ref ( ) ;
571- let params: HashMap < _ , _ > = url. query_pairs ( ) . collect ( ) ;
571+ let mut params: HashMap < _ , _ > = url. query_pairs ( ) . collect ( ) ;
572572 let query = params
573573 . get ( "query" )
574574 . map ( |q| q. to_string ( ) )
@@ -578,7 +578,7 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
578578
579579 // check if I am feeling lucky button pressed and redirect user to crate page
580580 // if there is a match. Also check for paths to items within crates.
581- if params. contains_key ( "i-am-feeling-lucky" ) || query. contains ( "::" ) {
581+ if params. remove ( "i-am-feeling-lucky" ) . is_some ( ) || query. contains ( "::" ) {
582582 // redirect to a random crate if query is empty
583583 if query. is_empty ( ) {
584584 return redirect_to_random_crate ( req, & mut conn) ;
@@ -594,17 +594,12 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
594594 None => query. clone ( ) ,
595595 } ;
596596
597- queries. extend (
598- params
599- . iter ( )
600- . filter ( |( k, _) | !matches ! ( k. as_ref( ) , "i-am-feeling-lucky" | "query" ) )
601- . map ( |( k, v) | ( k. as_ref ( ) , v. as_ref ( ) ) ) ,
602- ) ;
603-
604597 // since we never pass a version into `match_version` here, we'll never get
605598 // `MatchVersion::Exact`, so the distinction between `Exact` and `Semver` doesn't
606599 // matter
607600 if let Ok ( matchver) = match_version ( & mut conn, & krate, None ) {
601+ params. remove ( "query" ) ;
602+ queries. extend ( params. iter ( ) . map ( |( k, v) | ( k. as_ref ( ) , v. as_ref ( ) ) ) ) ;
608603 let ( version, _) = matchver. version . into_parts ( ) ;
609604 let krate = matchver. corrected_name . unwrap_or ( krate) ;
610605
0 commit comments