@@ -545,7 +545,7 @@ impl_webpage! {
545
545
546
546
pub fn search_handler ( req : & mut Request ) -> IronResult < Response > {
547
547
let url = req. url . as_ref ( ) ;
548
- let params: HashMap < _ , _ > = url. query_pairs ( ) . collect ( ) ;
548
+ let mut params: HashMap < _ , _ > = url. query_pairs ( ) . collect ( ) ;
549
549
let query = params
550
550
. get ( "query" )
551
551
. map ( |q| q. to_string ( ) )
@@ -555,7 +555,7 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
555
555
556
556
// check if I am feeling lucky button pressed and redirect user to crate page
557
557
// 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 ( "::" ) {
559
559
// redirect to a random crate if query is empty
560
560
if query. is_empty ( ) {
561
561
return redirect_to_random_crate ( req, & mut conn) ;
@@ -571,17 +571,12 @@ pub fn search_handler(req: &mut Request) -> IronResult<Response> {
571
571
None => query. clone ( ) ,
572
572
} ;
573
573
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
-
581
574
// since we never pass a version into `match_version` here, we'll never get
582
575
// `MatchVersion::Exact`, so the distinction between `Exact` and `Semver` doesn't
583
576
// matter
584
577
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 ( ) ) ) ) ;
585
580
let ( version, _) = matchver. version . into_parts ( ) ;
586
581
let krate = matchver. corrected_name . unwrap_or ( krate) ;
587
582
0 commit comments