pub struct HeaderMap<T = HeaderValue> { /* private fields */ }transports and transport-http only.Expand description
A specialized multimap for header names and values.
§Overview
HeaderMap is designed specifically for efficient manipulation of HTTP
headers. It supports multiple values per header name and provides
specialized APIs for insertion, retrieval, and iteration.
The internal implementation is optimized for common usage patterns in HTTP, and may change across versions. For example, the current implementation uses Robin Hood hashing to store entries compactly and enable high load factors with good performance. However, the collision resolution strategy and storage mechanism are not part of the public API and may be altered in future releases.
§Iteration order
Unless otherwise specified, the order in which items are returned by
iterators from HeaderMap methods is arbitrary; there is no guaranteed
ordering among the elements yielded by such an iterator. Changes to the
iteration order are not considered breaking changes, so users must not rely
on any incidental order produced by such an iterator. However, for a given
crate version, the iteration order will be consistent across all platforms.
§Adaptive hashing
HeaderMap uses an adaptive strategy for hashing to maintain fast lookups
while resisting hash collision attacks. The default hash function
prioritizes performance. In scenarios where high collision rates are
detected—typically indicative of denial-of-service attacks—the
implementation switches to a more secure, collision-resistant hash function.
§Limitations
A HeaderMap can store at most 32,768 entries (header name/value pairs).
Attempting to exceed this limit will result in a panic.
§Examples
Basic usage
let mut headers = HeaderMap::new();
headers.insert(HOST, "example.com".parse().unwrap());
headers.insert(CONTENT_LENGTH, "123".parse().unwrap());
assert!(headers.contains_key(HOST));
assert!(!headers.contains_key(LOCATION));
assert_eq!(headers[HOST], "example.com");
headers.remove(HOST);
assert!(!headers.contains_key(HOST));Implementations§
Source§impl<T> HeaderMap<T>
impl<T> HeaderMap<T>
Sourcepub fn with_capacity(capacity: usize) -> HeaderMap<T>
Available on crate features signers and signer-gcp and codegen only.
pub fn with_capacity(capacity: usize) -> HeaderMap<T>
signers and signer-gcp and codegen only.Create an empty HeaderMap with the specified capacity.
The returned map will allocate internal storage in order to hold about
capacity elements without reallocating. However, this is a “best
effort” as there are usage patterns that could cause additional
allocations before capacity headers are stored in the map.
More capacity than requested may be allocated.
§Panics
This method panics if capacity exceeds max HeaderMap capacity.
§Examples
let map: HeaderMap<u32> = HeaderMap::with_capacity(10);
assert!(map.is_empty());
assert_eq!(12, map.capacity());Sourcepub fn try_with_capacity(
capacity: usize,
) -> Result<HeaderMap<T>, MaxSizeReached>
Available on crate features signers and signer-gcp and codegen only.
pub fn try_with_capacity( capacity: usize, ) -> Result<HeaderMap<T>, MaxSizeReached>
signers and signer-gcp and codegen only.Create an empty HeaderMap with the specified capacity.
The returned map will allocate internal storage in order to hold about
capacity elements without reallocating. However, this is a “best
effort” as there are usage patterns that could cause additional
allocations before capacity headers are stored in the map.
More capacity than requested may be allocated.
§Errors
This function may return an error if HeaderMap exceeds max capacity
§Examples
let map: HeaderMap<u32> = HeaderMap::try_with_capacity(10).unwrap();
assert!(map.is_empty());
assert_eq!(12, map.capacity());Sourcepub fn len(&self) -> usize
Available on crate features signers and signer-gcp and codegen only.
pub fn len(&self) -> usize
signers and signer-gcp and codegen only.Returns the number of headers stored in the map.
This number represents the total number of values stored in the map. This number can be greater than or equal to the number of keys stored given that a single key may have more than one associated value.
§Examples
let mut map = HeaderMap::new();
assert_eq!(0, map.len());
map.insert(ACCEPT, "text/plain".parse().unwrap());
map.insert(HOST, "localhost".parse().unwrap());
assert_eq!(2, map.len());
map.append(ACCEPT, "text/html".parse().unwrap());
assert_eq!(3, map.len());Sourcepub fn keys_len(&self) -> usize
Available on crate features signers and signer-gcp and codegen only.
pub fn keys_len(&self) -> usize
signers and signer-gcp and codegen only.Returns the number of keys stored in the map.
This number will be less than or equal to len() as each key may have
more than one associated value.
§Examples
let mut map = HeaderMap::new();
assert_eq!(0, map.keys_len());
map.insert(ACCEPT, "text/plain".parse().unwrap());
map.insert(HOST, "localhost".parse().unwrap());
assert_eq!(2, map.keys_len());
map.insert(ACCEPT, "text/html".parse().unwrap());
assert_eq!(2, map.keys_len());Sourcepub fn is_empty(&self) -> bool
Available on crate features signers and signer-gcp and codegen only.
pub fn is_empty(&self) -> bool
signers and signer-gcp and codegen only.Returns true if the map contains no elements.
§Examples
let mut map = HeaderMap::new();
assert!(map.is_empty());
map.insert(HOST, "hello.world".parse().unwrap());
assert!(!map.is_empty());Sourcepub fn clear(&mut self)
Available on crate features signers and signer-gcp and codegen only.
pub fn clear(&mut self)
signers and signer-gcp and codegen only.Clears the map, removing all key-value pairs. Keeps the allocated memory for reuse.
§Examples
let mut map = HeaderMap::new();
map.insert(HOST, "hello.world".parse().unwrap());
map.clear();
assert!(map.is_empty());
assert!(map.capacity() > 0);Sourcepub fn capacity(&self) -> usize
Available on crate features signers and signer-gcp and codegen only.
pub fn capacity(&self) -> usize
signers and signer-gcp and codegen only.Returns the number of headers the map can hold without reallocating.
This number is an approximation as certain usage patterns could cause additional allocations before the returned capacity is filled.
§Examples
let mut map = HeaderMap::new();
assert_eq!(0, map.capacity());
map.insert(HOST, "hello.world".parse().unwrap());
assert_eq!(6, map.capacity());Sourcepub fn reserve(&mut self, additional: usize)
Available on crate features signers and signer-gcp and codegen only.
pub fn reserve(&mut self, additional: usize)
signers and signer-gcp and codegen only.Reserves capacity for at least additional more headers to be inserted
into the HeaderMap.
The header map may reserve more space to avoid frequent reallocations.
Like with with_capacity, this will be a “best effort” to avoid
allocations until additional more headers are inserted. Certain usage
patterns could cause additional allocations before the number is
reached.
§Panics
Panics if the new allocation size overflows HeaderMap MAX_SIZE.
§Examples
let mut map = HeaderMap::new();
map.reserve(10);Sourcepub fn try_reserve(&mut self, additional: usize) -> Result<(), MaxSizeReached>
Available on crate features signers and signer-gcp and codegen only.
pub fn try_reserve(&mut self, additional: usize) -> Result<(), MaxSizeReached>
signers and signer-gcp and codegen only.Reserves capacity for at least additional more headers to be inserted
into the HeaderMap.
The header map may reserve more space to avoid frequent reallocations.
Like with with_capacity, this will be a “best effort” to avoid
allocations until additional more headers are inserted. Certain usage
patterns could cause additional allocations before the number is
reached.
§Errors
This method differs from reserve by returning an error instead of
panicking if the value is too large.
§Examples
let mut map = HeaderMap::new();
map.try_reserve(10).unwrap();Sourcepub fn get<K>(&self, key: K) -> Option<&T>where
K: AsHeaderName,
Available on crate features signers and signer-gcp and codegen only.
pub fn get<K>(&self, key: K) -> Option<&T>where
K: AsHeaderName,
signers and signer-gcp and codegen only.Returns a reference to the value associated with the key.
If there are multiple values associated with the key, then the first one
is returned. Use get_all to get all values associated with a given
key. Returns None if there are no values associated with the key.
§Examples
let mut map = HeaderMap::new();
assert!(map.get("host").is_none());
map.insert(HOST, "hello".parse().unwrap());
assert_eq!(map.get(HOST).unwrap(), &"hello");
assert_eq!(map.get("host").unwrap(), &"hello");
map.append(HOST, "world".parse().unwrap());
assert_eq!(map.get("host").unwrap(), &"hello");Sourcepub fn get_mut<K>(&mut self, key: K) -> Option<&mut T>where
K: AsHeaderName,
Available on crate features signers and signer-gcp and codegen only.
pub fn get_mut<K>(&mut self, key: K) -> Option<&mut T>where
K: AsHeaderName,
signers and signer-gcp and codegen only.Returns a mutable reference to the value associated with the key.
If there are multiple values associated with the key, then the first one
is returned. Use entry to get all values associated with a given
key. Returns None if there are no values associated with the key.
§Examples
let mut map = HeaderMap::default();
map.insert(HOST, "hello".to_string());
map.get_mut("host").unwrap().push_str("-world");
assert_eq!(map.get(HOST).unwrap(), &"hello-world");Sourcepub fn get_all<K>(&self, key: K) -> GetAll<'_, T>where
K: AsHeaderName,
Available on crate features signers and signer-gcp and codegen only.
pub fn get_all<K>(&self, key: K) -> GetAll<'_, T>where
K: AsHeaderName,
signers and signer-gcp and codegen only.Returns a view of all values associated with a key.
The returned view does not incur any allocations and allows iterating
the values associated with the key. See GetAll for more details.
Returns None if there are no values associated with the key.
§Examples
let mut map = HeaderMap::new();
map.insert(HOST, "hello".parse().unwrap());
map.append(HOST, "goodbye".parse().unwrap());
let view = map.get_all("host");
let mut iter = view.iter();
assert_eq!(&"hello", iter.next().unwrap());
assert_eq!(&"goodbye", iter.next().unwrap());
assert!(iter.next().is_none());Sourcepub fn contains_key<K>(&self, key: K) -> boolwhere
K: AsHeaderName,
Available on crate features signers and signer-gcp and codegen only.
pub fn contains_key<K>(&self, key: K) -> boolwhere
K: AsHeaderName,
signers and signer-gcp and codegen only.Returns true if the map contains a value for the specified key.
§Examples
let mut map = HeaderMap::new();
assert!(!map.contains_key(HOST));
map.insert(HOST, "world".parse().unwrap());
assert!(map.contains_key("host"));Sourcepub fn iter(&self) -> Iter<'_, T> ⓘ
Available on crate features signers and signer-gcp and codegen only.
pub fn iter(&self) -> Iter<'_, T> ⓘ
signers and signer-gcp and codegen only.An iterator visiting all key-value pairs.
The iteration order is arbitrary, but consistent across platforms for the same crate version. Each key will be yielded once per associated value. So, if a key has 3 associated values, it will be yielded 3 times.
§Examples
let mut map = HeaderMap::new();
map.insert(HOST, "hello".parse().unwrap());
map.append(HOST, "goodbye".parse().unwrap());
map.insert(CONTENT_LENGTH, "123".parse().unwrap());
for (key, value) in map.iter() {
println!("{:?}: {:?}", key, value);
}Sourcepub fn iter_mut(&mut self) -> IterMut<'_, T> ⓘ
Available on crate features signers and signer-gcp and codegen only.
pub fn iter_mut(&mut self) -> IterMut<'_, T> ⓘ
signers and signer-gcp and codegen only.An iterator visiting all key-value pairs, with mutable value references.
The iterator order is arbitrary, but consistent across platforms for the same crate version. Each key will be yielded once per associated value, so if a key has 3 associated values, it will be yielded 3 times.
§Examples
let mut map = HeaderMap::default();
map.insert(HOST, "hello".to_string());
map.append(HOST, "goodbye".to_string());
map.insert(CONTENT_LENGTH, "123".to_string());
for (key, value) in map.iter_mut() {
value.push_str("-boop");
}Sourcepub fn keys(&self) -> Keys<'_, T> ⓘ
Available on crate features signers and signer-gcp and codegen only.
pub fn keys(&self) -> Keys<'_, T> ⓘ
signers and signer-gcp and codegen only.An iterator visiting all keys.
The iteration order is arbitrary, but consistent across platforms for the same crate version. Each key will be yielded only once even if it has multiple associated values.
§Examples
let mut map = HeaderMap::new();
map.insert(HOST, "hello".parse().unwrap());
map.append(HOST, "goodbye".parse().unwrap());
map.insert(CONTENT_LENGTH, "123".parse().unwrap());
for key in map.keys() {
println!("{:?}", key);
}Sourcepub fn values(&self) -> Values<'_, T> ⓘ
Available on crate features signers and signer-gcp and codegen only.
pub fn values(&self) -> Values<'_, T> ⓘ
signers and signer-gcp and codegen only.An iterator visiting all values.
The iteration order is arbitrary, but consistent across platforms for the same crate version.
§Examples
let mut map = HeaderMap::new();
map.insert(HOST, "hello".parse().unwrap());
map.append(HOST, "goodbye".parse().unwrap());
map.insert(CONTENT_LENGTH, "123".parse().unwrap());
for value in map.values() {
println!("{:?}", value);
}Sourcepub fn values_mut(&mut self) -> ValuesMut<'_, T> ⓘ
Available on crate features signers and signer-gcp and codegen only.
pub fn values_mut(&mut self) -> ValuesMut<'_, T> ⓘ
signers and signer-gcp and codegen only.An iterator visiting all values mutably.
The iteration order is arbitrary, but consistent across platforms for the same crate version.
§Examples
let mut map = HeaderMap::default();
map.insert(HOST, "hello".to_string());
map.append(HOST, "goodbye".to_string());
map.insert(CONTENT_LENGTH, "123".to_string());
for value in map.values_mut() {
value.push_str("-boop");
}Sourcepub fn drain(&mut self) -> Drain<'_, T> ⓘ
Available on crate features signers and signer-gcp and codegen only.
pub fn drain(&mut self) -> Drain<'_, T> ⓘ
signers and signer-gcp and codegen only.Clears the map, returning all entries as an iterator.
The internal memory is kept for reuse.
For each yielded item that has None provided for the HeaderName,
then the associated header name is the same as that of the previously
yielded item. The first yielded item will have HeaderName set.
§Examples
let mut map = HeaderMap::new();
map.insert(HOST, "hello".parse().unwrap());
map.append(HOST, "goodbye".parse().unwrap());
map.insert(CONTENT_LENGTH, "123".parse().unwrap());
let mut drain = map.drain();
assert_eq!(drain.next(), Some((Some(HOST), "hello".parse().unwrap())));
assert_eq!(drain.next(), Some((None, "goodbye".parse().unwrap())));
assert_eq!(drain.next(), Some((Some(CONTENT_LENGTH), "123".parse().unwrap())));
assert_eq!(drain.next(), None);Sourcepub fn entry<K>(&mut self, key: K) -> Entry<'_, T>where
K: IntoHeaderName,
Available on crate features signers and signer-gcp and codegen only.
pub fn entry<K>(&mut self, key: K) -> Entry<'_, T>where
K: IntoHeaderName,
signers and signer-gcp and codegen only.Gets the given key’s corresponding entry in the map for in-place manipulation.
§Panics
This method panics if capacity exceeds max HeaderMap capacity
§Examples
let mut map: HeaderMap<u32> = HeaderMap::default();
let headers = &[
"content-length",
"x-hello",
"Content-Length",
"x-world",
];
for &header in headers {
let counter = map.entry(header).or_insert(0);
*counter += 1;
}
assert_eq!(map["content-length"], 2);
assert_eq!(map["x-hello"], 1);Sourcepub fn try_entry<K>(
&mut self,
key: K,
) -> Result<Entry<'_, T>, InvalidHeaderName>where
K: AsHeaderName,
Available on crate features signers and signer-gcp and codegen only.
pub fn try_entry<K>(
&mut self,
key: K,
) -> Result<Entry<'_, T>, InvalidHeaderName>where
K: AsHeaderName,
signers and signer-gcp and codegen only.Gets the given key’s corresponding entry in the map for in-place manipulation.
§Errors
This method differs from entry by allowing types that may not be
valid HeaderNames to passed as the key (such as String). If they
do not parse as a valid HeaderName, this returns an
InvalidHeaderName error.
If reserving space goes over the maximum, this will also return an
error. However, to prevent breaking changes to the return type, the
error will still say InvalidHeaderName, unlike other try_* methods
which return a MaxSizeReached error.
Sourcepub fn insert<K>(&mut self, key: K, val: T) -> Option<T>where
K: IntoHeaderName,
Available on crate features signers and signer-gcp and codegen only.
pub fn insert<K>(&mut self, key: K, val: T) -> Option<T>where
K: IntoHeaderName,
signers and signer-gcp and codegen only.Inserts a key-value pair into the map.
If the map did not previously have this key present, then None is
returned.
If the map did have this key present, the new value is associated with
the key and all previous values are removed. Note that only a single
one of the previous values is returned. If there are multiple values
that have been previously associated with the key, then the first one is
returned. See insert_mult on OccupiedEntry for an API that returns
all values.
The key is not updated, though; this matters for types that can be ==
without being identical.
§Panics
This method panics if capacity exceeds max HeaderMap capacity
§Examples
let mut map = HeaderMap::new();
assert!(map.insert(HOST, "world".parse().unwrap()).is_none());
assert!(!map.is_empty());
let mut prev = map.insert(HOST, "earth".parse().unwrap()).unwrap();
assert_eq!("world", prev);Sourcepub fn try_insert<K>(
&mut self,
key: K,
val: T,
) -> Result<Option<T>, MaxSizeReached>where
K: IntoHeaderName,
Available on crate features signers and signer-gcp and codegen only.
pub fn try_insert<K>(
&mut self,
key: K,
val: T,
) -> Result<Option<T>, MaxSizeReached>where
K: IntoHeaderName,
signers and signer-gcp and codegen only.Inserts a key-value pair into the map.
If the map did not previously have this key present, then None is
returned.
If the map did have this key present, the new value is associated with
the key and all previous values are removed. Note that only a single
one of the previous values is returned. If there are multiple values
that have been previously associated with the key, then the first one is
returned. See insert_mult on OccupiedEntry for an API that returns
all values.
The key is not updated, though; this matters for types that can be ==
without being identical.
§Errors
This function may return an error if HeaderMap exceeds max capacity
§Examples
let mut map = HeaderMap::new();
assert!(map.try_insert(HOST, "world".parse().unwrap()).unwrap().is_none());
assert!(!map.is_empty());
let mut prev = map.try_insert(HOST, "earth".parse().unwrap()).unwrap().unwrap();
assert_eq!("world", prev);Sourcepub fn append<K>(&mut self, key: K, value: T) -> boolwhere
K: IntoHeaderName,
Available on crate features signers and signer-gcp and codegen only.
pub fn append<K>(&mut self, key: K, value: T) -> boolwhere
K: IntoHeaderName,
signers and signer-gcp and codegen only.Inserts a key-value pair into the map.
If the map did not previously have this key present, then false is
returned.
If the map did have this key present, the new value is pushed to the end
of the list of values currently associated with the key. The key is not
updated, though; this matters for types that can be == without being
identical.
§Panics
This method panics if capacity exceeds max HeaderMap capacity
§Examples
let mut map = HeaderMap::new();
assert!(map.insert(HOST, "world".parse().unwrap()).is_none());
assert!(!map.is_empty());
map.append(HOST, "earth".parse().unwrap());
let values = map.get_all("host");
let mut i = values.iter();
assert_eq!("world", *i.next().unwrap());
assert_eq!("earth", *i.next().unwrap());Sourcepub fn try_append<K>(
&mut self,
key: K,
value: T,
) -> Result<bool, MaxSizeReached>where
K: IntoHeaderName,
Available on crate features signers and signer-gcp and codegen only.
pub fn try_append<K>(
&mut self,
key: K,
value: T,
) -> Result<bool, MaxSizeReached>where
K: IntoHeaderName,
signers and signer-gcp and codegen only.Inserts a key-value pair into the map.
If the map did not previously have this key present, then false is
returned.
If the map did have this key present, the new value is pushed to the end
of the list of values currently associated with the key. The key is not
updated, though; this matters for types that can be == without being
identical.
§Errors
This function may return an error if HeaderMap exceeds max capacity
§Examples
let mut map = HeaderMap::new();
assert!(map.try_insert(HOST, "world".parse().unwrap()).unwrap().is_none());
assert!(!map.is_empty());
map.try_append(HOST, "earth".parse().unwrap()).unwrap();
let values = map.get_all("host");
let mut i = values.iter();
assert_eq!("world", *i.next().unwrap());
assert_eq!("earth", *i.next().unwrap());Sourcepub fn remove<K>(&mut self, key: K) -> Option<T>where
K: AsHeaderName,
Available on crate features signers and signer-gcp and codegen only.
pub fn remove<K>(&mut self, key: K) -> Option<T>where
K: AsHeaderName,
signers and signer-gcp and codegen only.Removes a key from the map, returning the value associated with the key.
Returns None if the map does not contain the key. If there are
multiple values associated with the key, then the first one is returned.
See remove_entry_mult on OccupiedEntry for an API that yields all
values.
§Examples
let mut map = HeaderMap::new();
map.insert(HOST, "hello.world".parse().unwrap());
let prev = map.remove(HOST).unwrap();
assert_eq!("hello.world", prev);
assert!(map.remove(HOST).is_none());Trait Implementations§
Source§impl AsMut<HeaderMap> for MetadataMap
impl AsMut<HeaderMap> for MetadataMap
Source§impl AsRef<HeaderMap> for MetadataMap
impl AsRef<HeaderMap> for MetadataMap
Source§impl<T> Extend<(HeaderName, T)> for HeaderMap<T>
impl<T> Extend<(HeaderName, T)> for HeaderMap<T>
Source§fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = (HeaderName, T)>,
fn extend<I>(&mut self, iter: I)where
I: IntoIterator<Item = (HeaderName, T)>,
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl<T> Extend<(Option<HeaderName>, T)> for HeaderMap<T>
impl<T> Extend<(Option<HeaderName>, T)> for HeaderMap<T>
Source§fn extend<I>(&mut self, iter: I)
fn extend<I>(&mut self, iter: I)
Extend a HeaderMap with the contents of another HeaderMap.
This function expects the yielded items to follow the same structure as
IntoIter.
§Panics
This panics if the first yielded item does not have a HeaderName.
§Examples
let mut map = HeaderMap::new();
map.insert(ACCEPT, "text/plain".parse().unwrap());
map.insert(HOST, "hello.world".parse().unwrap());
let mut extra = HeaderMap::new();
extra.insert(HOST, "foo.bar".parse().unwrap());
extra.insert(COOKIE, "hello".parse().unwrap());
extra.append(COOKIE, "world".parse().unwrap());
map.extend(extra);
assert_eq!(map["host"], "foo.bar");
assert_eq!(map["accept"], "text/plain");
assert_eq!(map["cookie"], "hello");
let v = map.get_all("host");
assert_eq!(1, v.iter().count());
let v = map.get_all("cookie");
assert_eq!(2, v.iter().count());Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl<T> FromIterator<(HeaderName, T)> for HeaderMap<T>
impl<T> FromIterator<(HeaderName, T)> for HeaderMap<T>
Source§fn from_iter<I>(iter: I) -> HeaderMap<T>where
I: IntoIterator<Item = (HeaderName, T)>,
fn from_iter<I>(iter: I) -> HeaderMap<T>where
I: IntoIterator<Item = (HeaderName, T)>,
Source§impl<S> FromRequestParts<S> for HeaderMap
Clone the headers from the request.
impl<S> FromRequestParts<S> for HeaderMap
Clone the headers from the request.
Prefer using TypedHeader to extract only the headers you need.
Source§type Rejection = Infallible
type Rejection = Infallible
Source§async fn from_request_parts(
parts: &mut Parts,
_: &S,
) -> Result<HeaderMap, <HeaderMap as FromRequestParts<S>>::Rejection>
async fn from_request_parts( parts: &mut Parts, _: &S, ) -> Result<HeaderMap, <HeaderMap as FromRequestParts<S>>::Rejection>
Source§impl<K, T> Index<K> for HeaderMap<T>where
K: AsHeaderName,
impl<K, T> Index<K> for HeaderMap<T>where
K: AsHeaderName,
Source§impl<'a, T> IntoIterator for &'a HeaderMap<T>
impl<'a, T> IntoIterator for &'a HeaderMap<T>
Source§impl<'a, T> IntoIterator for &'a mut HeaderMap<T>
impl<'a, T> IntoIterator for &'a mut HeaderMap<T>
Source§impl<T> IntoIterator for HeaderMap<T>
impl<T> IntoIterator for HeaderMap<T>
Source§fn into_iter(self) -> IntoIter<T> ⓘ
fn into_iter(self) -> IntoIter<T> ⓘ
Creates a consuming iterator, that is, one that moves keys and values out of the map in arbitrary order. The map cannot be used after calling this.
For each yielded item that has None provided for the HeaderName,
then the associated header name is the same as that of the previously
yielded item. The first yielded item will have HeaderName set.
§Examples
Basic usage.
let mut map = HeaderMap::new();
map.insert(header::CONTENT_LENGTH, "123".parse().unwrap());
map.insert(header::CONTENT_TYPE, "json".parse().unwrap());
let mut iter = map.into_iter();
assert_eq!(iter.next(), Some((Some(header::CONTENT_LENGTH), "123".parse().unwrap())));
assert_eq!(iter.next(), Some((Some(header::CONTENT_TYPE), "json".parse().unwrap())));
assert!(iter.next().is_none());Multiple values per key.
let mut map = HeaderMap::new();
map.append(header::CONTENT_LENGTH, "123".parse().unwrap());
map.append(header::CONTENT_LENGTH, "456".parse().unwrap());
map.append(header::CONTENT_TYPE, "json".parse().unwrap());
map.append(header::CONTENT_TYPE, "html".parse().unwrap());
map.append(header::CONTENT_TYPE, "xml".parse().unwrap());
let mut iter = map.into_iter();
assert_eq!(iter.next(), Some((Some(header::CONTENT_LENGTH), "123".parse().unwrap())));
assert_eq!(iter.next(), Some((None, "456".parse().unwrap())));
assert_eq!(iter.next(), Some((Some(header::CONTENT_TYPE), "json".parse().unwrap())));
assert_eq!(iter.next(), Some((None, "html".parse().unwrap())));
assert_eq!(iter.next(), Some((None, "xml".parse().unwrap())));
assert!(iter.next().is_none());Source§type Item = (Option<HeaderName>, T)
type Item = (Option<HeaderName>, T)
Source§impl IntoResponse for HeaderMap
impl IntoResponse for HeaderMap
Source§fn into_response(self) -> Response<Body>
fn into_response(self) -> Response<Body>
Source§impl IntoResponseParts for HeaderMap
impl IntoResponseParts for HeaderMap
Source§type Error = Infallible
type Error = Infallible
Source§fn into_response_parts(
self,
res: ResponseParts,
) -> Result<ResponseParts, <HeaderMap as IntoResponseParts>::Error>
fn into_response_parts( self, res: ResponseParts, ) -> Result<ResponseParts, <HeaderMap as IntoResponseParts>::Error>
Source§impl<'a, K, V, S, T> TryFrom<&'a HashMap<K, V, S>> for HeaderMap<T>
Try to convert a HashMap into a HeaderMap.
impl<'a, K, V, S, T> TryFrom<&'a HashMap<K, V, S>> for HeaderMap<T>
Try to convert a HashMap into a HeaderMap.
§Examples
use std::collections::HashMap;
use std::convert::TryInto;
use http::HeaderMap;
let mut map = HashMap::new();
map.insert("X-Custom-Header".to_string(), "my value".to_string());
let headers: HeaderMap = (&map).try_into().expect("valid headers");
assert_eq!(headers["X-Custom-Header"], "my value");impl<T> Eq for HeaderMap<T>where
T: Eq,
Auto Trait Implementations§
impl<T> Freeze for HeaderMap<T>
impl<T> RefUnwindSafe for HeaderMap<T>where
T: RefUnwindSafe,
impl<T> Send for HeaderMap<T>where
T: Send,
impl<T> Sync for HeaderMap<T>where
T: Sync,
impl<T> Unpin for HeaderMap<T>where
T: Unpin,
impl<T> UnsafeUnpin for HeaderMap<T>
impl<T> UnwindSafe for HeaderMap<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<S, T> FromRequest<S, ViaParts> for T
impl<S, T> FromRequest<S, ViaParts> for T
Source§type Rejection = <T as FromRequestParts<S>>::Rejection
type Rejection = <T as FromRequestParts<S>>::Rejection
Source§fn from_request(
req: Request<Body>,
state: &S,
) -> impl Future<Output = Result<T, <T as FromRequest<S, ViaParts>>::Rejection>>
fn from_request( req: Request<Body>, state: &S, ) -> impl Future<Output = Result<T, <T as FromRequest<S, ViaParts>>::Rejection>>
Source§impl<T, S> Handler<IntoResponseHandler, S> for T
impl<T, S> Handler<IntoResponseHandler, S> for T
Source§fn call(
self,
_req: Request<Body>,
_state: S,
) -> <T as Handler<IntoResponseHandler, S>>::Future
fn call( self, _req: Request<Body>, _state: S, ) -> <T as Handler<IntoResponseHandler, S>>::Future
Source§fn layer<L>(self, layer: L) -> Layered<L, Self, T, S>where
L: Layer<HandlerService<Self, T, S>> + Clone,
<L as Layer<HandlerService<Self, T, S>>>::Service: Service<Request<Body>>,
fn layer<L>(self, layer: L) -> Layered<L, Self, T, S>where
L: Layer<HandlerService<Self, T, S>> + Clone,
<L as Layer<HandlerService<Self, T, S>>>::Service: Service<Request<Body>>,
tower::Layer to the handler. Read moreSource§fn with_state(self, state: S) -> HandlerService<Self, T, S>
fn with_state(self, state: S) -> HandlerService<Self, T, S>
Service by providing the stateSource§impl<H, T> HandlerWithoutStateExt<T> for H
impl<H, T> HandlerWithoutStateExt<T> for H
Source§fn into_service(self) -> HandlerService<H, T, ()>
fn into_service(self) -> HandlerService<H, T, ()>
Service and no state.Source§fn into_make_service(self) -> IntoMakeService<HandlerService<H, T, ()>>
fn into_make_service(self) -> IntoMakeService<HandlerService<H, T, ()>>
MakeService and no state. Read moreSource§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 96 bytes