@@ -17,17 +17,18 @@ impl HeadersTraits for IndexMapSSR {
17
17
self . clone ( )
18
18
}
19
19
fn to_headermap ( & self ) -> HeaderMap {
20
- self . iter ( )
21
- . map ( | ( k, v) | {
22
- (
23
- HeaderName :: from_bytes ( k. as_bytes ( ) )
24
- . unwrap_or_else ( |k| panic ! ( "Invalid header name: {k:?}" ) ) ,
25
- HeaderValue :: from_bytes ( v. as_bytes ( ) )
26
- . unwrap_or_else ( |v| panic ! ( "Invalid header value: {v:?}" ) ) ,
27
- )
28
- } )
29
- . collect ( )
20
+ let mut header_map = HeaderMap :: with_capacity ( self . len ( ) ) ;
21
+ for ( k, v) in self {
22
+ header_map . insert (
23
+ HeaderName :: from_bytes ( k. as_bytes ( ) )
24
+ . unwrap_or_else ( |k| panic ! ( "Invalid header name: {k:?}" ) ) ,
25
+ HeaderValue :: from_bytes ( v. as_bytes ( ) )
26
+ . unwrap_or_else ( |v| panic ! ( "Invalid header value: {v:?}" ) ) ,
27
+ ) ;
28
+ }
29
+ header_map
30
30
}
31
+
31
32
fn insert_key_value ( & mut self , key : String , value : String ) -> Result < ( ) , Error > {
32
33
self . insert ( key. to_string ( ) , value. to_string ( ) ) ;
33
34
Ok ( ( ) )
@@ -36,16 +37,18 @@ impl HeadersTraits for IndexMapSSR {
36
37
37
38
impl HeadersTraits for HeaderMap {
38
39
fn to_indexmap ( & self ) -> IndexMapSSR {
39
- self . iter ( )
40
- . map ( |( k, v) | {
41
- (
42
- k. to_string ( ) ,
43
- v. to_str ( )
44
- . unwrap_or_else ( |v| panic ! ( "Invalid header value: {v:?}" ) )
45
- . to_string ( ) ,
46
- )
47
- } )
48
- . collect ( )
40
+ let mut index_map =
41
+ IndexMapSSR :: with_capacity_and_hasher ( self . len ( ) , RandomState :: default ( ) ) ;
42
+ for ( key, value) in self {
43
+ index_map. insert (
44
+ key. as_str ( ) . to_string ( ) ,
45
+ value
46
+ . to_str ( )
47
+ . unwrap_or_else ( |v| panic ! ( "Invalid header value: {v:?}" ) )
48
+ . to_string ( ) ,
49
+ ) ;
50
+ }
51
+ index_map
49
52
}
50
53
51
54
fn to_headermap ( & self ) -> HeaderMap {
@@ -68,9 +71,15 @@ pub trait CookiesTraits {
68
71
69
72
impl CookiesTraits for IndexMapSSR {
70
73
fn to_string ( & self ) -> String {
71
- self . iter ( )
72
- . map ( |( k, v) | format ! ( "{}={}" , k, v) )
73
- . collect :: < Vec < String > > ( )
74
- . join ( "; " )
74
+ let mut result = String :: with_capacity ( self . len ( ) * 40 ) ;
75
+ for ( k, v) in self {
76
+ if !result. is_empty ( ) {
77
+ result. push_str ( "; " ) ;
78
+ }
79
+ result. push_str ( k) ;
80
+ result. push ( '=' ) ;
81
+ result. push_str ( v) ;
82
+ }
83
+ result
75
84
}
76
85
}
0 commit comments