@@ -575,3 +575,62 @@ fn remove_all_values<K>(headers: &mut HeaderMap, key: K) -> Vec<HeaderValue>
575575 Entry :: Vacant ( _) => vec ! [ ] ,
576576 }
577577}
578+
579+ #[ test]
580+ fn remove_entry_3_others_a ( ) {
581+ let mut headers = HeaderMap :: new ( ) ;
582+ headers. insert ( VIA , "1.1 example.com" . parse ( ) . unwrap ( ) ) ;
583+ headers. insert ( SET_COOKIE , "cookie_1=value 1" . parse ( ) . unwrap ( ) ) ;
584+ headers. append ( SET_COOKIE , "cookie_2=value 2" . parse ( ) . unwrap ( ) ) ;
585+ headers. append ( VIA , "1.1 other.com" . parse ( ) . unwrap ( ) ) ;
586+ headers. append ( SET_COOKIE , "cookie_3=value 3" . parse ( ) . unwrap ( ) ) ;
587+ headers. insert ( VARY , "*" . parse ( ) . unwrap ( ) ) ;
588+
589+ assert_eq ! ( headers. len( ) , 6 ) ;
590+
591+ let cookie = remove_values ( & mut headers, SET_COOKIE ) ;
592+ assert_eq ! ( cookie, Some ( "cookie_1=value 1" . parse( ) . unwrap( ) ) ) ;
593+ assert_eq ! ( headers. len( ) , 3 ) ;
594+
595+ let via = remove_values ( & mut headers, VIA ) ;
596+ assert_eq ! ( via, Some ( "1.1 example.com" . parse( ) . unwrap( ) ) ) ;
597+ assert_eq ! ( headers. len( ) , 1 ) ;
598+
599+ let vary = remove_values ( & mut headers, VARY ) ;
600+ assert_eq ! ( vary, Some ( "*" . parse( ) . unwrap( ) ) ) ;
601+ assert_eq ! ( headers. len( ) , 0 ) ;
602+ }
603+
604+ #[ test]
605+ fn remove_entry_3_others_b ( ) {
606+ let mut headers = HeaderMap :: new ( ) ;
607+ headers. insert ( VIA , "1.1 example.com" . parse ( ) . unwrap ( ) ) ;
608+ headers. insert ( SET_COOKIE , "cookie_1=value 1" . parse ( ) . unwrap ( ) ) ;
609+ headers. append ( SET_COOKIE , "cookie_2=value 2" . parse ( ) . unwrap ( ) ) ;
610+ headers. append ( VIA , "1.1 other.com" . parse ( ) . unwrap ( ) ) ;
611+ headers. append ( SET_COOKIE , "cookie_3=value 3" . parse ( ) . unwrap ( ) ) ;
612+ headers. insert ( VARY , "*" . parse ( ) . unwrap ( ) ) ;
613+
614+ assert_eq ! ( headers. len( ) , 6 ) ;
615+
616+ let vary = remove_values ( & mut headers, VARY ) ;
617+ assert_eq ! ( vary, Some ( "*" . parse( ) . unwrap( ) ) ) ;
618+ assert_eq ! ( headers. len( ) , 5 ) ;
619+
620+ let via = remove_values ( & mut headers, VIA ) ;
621+ assert_eq ! ( via, Some ( "1.1 example.com" . parse( ) . unwrap( ) ) ) ;
622+ assert_eq ! ( headers. len( ) , 3 ) ;
623+
624+ let cookie = remove_values ( & mut headers, SET_COOKIE ) ;
625+ assert_eq ! ( cookie, Some ( "cookie_1=value 1" . parse( ) . unwrap( ) ) ) ;
626+ assert_eq ! ( headers. len( ) , 0 ) ;
627+ }
628+
629+ fn remove_values < K > ( headers : & mut HeaderMap , key : K ) -> Option < HeaderValue >
630+ where K : IntoHeaderName
631+ {
632+ match headers. entry ( key) {
633+ Entry :: Occupied ( e) => Some ( e. remove_entry ( ) . 1 ) ,
634+ Entry :: Vacant ( _) => None ,
635+ }
636+ }
0 commit comments