@@ -568,7 +568,7 @@ impl_webpage! {
568
568
569
569
pub fn search_handler ( req : & mut Request ) -> IronResult < Response > {
570
570
let url = req. url . as_ref ( ) ;
571
- let params: HashMap < _ , _ > = url. query_pairs ( ) . collect ( ) ;
571
+ let mut params: HashMap < _ , _ > = url. query_pairs ( ) . collect ( ) ;
572
572
let query = params
573
573
. get ( "query" )
574
574
. map ( |q| q. to_string ( ) )
@@ -578,7 +578,7 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
578
578
579
579
// check if I am feeling lucky button pressed and redirect user to crate page
580
580
// 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 ( "::" ) {
582
582
// redirect to a random crate if query is empty
583
583
if query. is_empty ( ) {
584
584
return redirect_to_random_crate ( req, & mut conn) ;
@@ -594,17 +594,12 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
594
594
None => query. clone ( ) ,
595
595
} ;
596
596
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
-
604
597
// since we never pass a version into `match_version` here, we'll never get
605
598
// `MatchVersion::Exact`, so the distinction between `Exact` and `Semver` doesn't
606
599
// matter
607
600
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 ( ) ) ) ) ;
608
603
let ( version, _) = matchver. version . into_parts ( ) ;
609
604
let krate = matchver. corrected_name . unwrap_or ( krate) ;
610
605
0 commit comments