@@ -13,8 +13,9 @@ use super::AsHeaderName;
13
13
/// `HeaderMap` is a "multi-map" of [`HeaderName`] to one or more [`HeaderValue`]s.
14
14
///
15
15
/// # Examples
16
+ ///
16
17
/// ```
17
- /// use actix_http::header::{self, HeaderMap, HeaderValue};
18
+ /// # use actix_http::header::{self, HeaderMap, HeaderValue};
18
19
///
19
20
/// let mut map = HeaderMap::new();
20
21
///
@@ -29,6 +30,21 @@ use super::AsHeaderName;
29
30
///
30
31
/// assert!(!map.contains_key(header::ORIGIN));
31
32
/// ```
33
+ ///
34
+ /// Construct a header map using the [`FromIterator`] implementation. Note that it uses the append
35
+ /// strategy, so duplicate header names are preserved.
36
+ ///
37
+ /// ```
38
+ /// use actix_http::header::{self, HeaderMap, HeaderValue};
39
+ ///
40
+ /// let headers = HeaderMap::from_iter([
41
+ /// (header::CONTENT_TYPE, HeaderValue::from_static("text/plain")),
42
+ /// (header::COOKIE, HeaderValue::from_static("foo=1")),
43
+ /// (header::COOKIE, HeaderValue::from_static("bar=1")),
44
+ /// ]);
45
+ ///
46
+ /// assert_eq!(headers.len(), 3);
47
+ /// ```
32
48
#[ derive( Debug , Clone , Default ) ]
33
49
pub struct HeaderMap {
34
50
pub ( crate ) inner : AHashMap < HeaderName , Value > ,
@@ -368,8 +384,8 @@ impl HeaderMap {
368
384
/// let removed = map.insert(header::ACCEPT, HeaderValue::from_static("text/html"));
369
385
/// assert!(!removed.is_empty());
370
386
/// ```
371
- pub fn insert ( & mut self , key : HeaderName , val : HeaderValue ) -> Removed {
372
- let value = self . inner . insert ( key , Value :: one ( val) ) ;
387
+ pub fn insert ( & mut self , name : HeaderName , val : HeaderValue ) -> Removed {
388
+ let value = self . inner . insert ( name , Value :: one ( val) ) ;
373
389
Removed :: new ( value)
374
390
}
375
391
@@ -636,6 +652,16 @@ impl<'a> IntoIterator for &'a HeaderMap {
636
652
}
637
653
}
638
654
655
+ impl FromIterator < ( HeaderName , HeaderValue ) > for HeaderMap {
656
+ fn from_iter < T : IntoIterator < Item = ( HeaderName , HeaderValue ) > > ( iter : T ) -> Self {
657
+ iter. into_iter ( )
658
+ . fold ( Self :: new ( ) , |mut map, ( name, value) | {
659
+ map. append ( name, value) ;
660
+ map
661
+ } )
662
+ }
663
+ }
664
+
639
665
/// Convert a `http::HeaderMap` to our `HeaderMap`.
640
666
impl From < http:: HeaderMap > for HeaderMap {
641
667
fn from ( mut map : http:: HeaderMap ) -> Self {
0 commit comments