diff --git a/src/header/map.rs b/src/header/map.rs index deb39d1..93a2c62 100644 --- a/src/header/map.rs +++ b/src/header/map.rs @@ -108,7 +108,7 @@ pub struct IntoIter { /// associated value. #[derive(Debug)] pub struct Keys<'a, T: 'a> { - inner: Iter<'a, T>, + inner: ::std::slice::Iter<'a, Bucket>, } /// `HeaderMap` value iterator. @@ -844,7 +844,7 @@ impl HeaderMap { /// } /// ``` pub fn keys(&self) -> Keys { - Keys { inner: self.iter() } + Keys { inner: self.entries.iter() } } /// An iterator visiting all values. @@ -2004,7 +2004,7 @@ impl<'a, T> Iterator for Keys<'a, T> { type Item = &'a HeaderName; fn next(&mut self) -> Option { - self.inner.next().map(|(n, _)| n) + self.inner.next().map(|b| &b.key) } } @@ -3219,3 +3219,11 @@ fn test_bounds() { check_bounds::>(); check_bounds::>(); } + +#[test] +fn skip_duplicates_during_key_iteration() { + let mut map = HeaderMap::new(); + map.append("a", HeaderValue::from_static("a")); + map.append("a", HeaderValue::from_static("b")); + assert_eq!(map.keys().count(), map.keys_len()); +}