diff --git a/src/common/vary.rs b/src/common/vary.rs index 6a3613ee..ac2bc22c 100644 --- a/src/common/vary.rs +++ b/src/common/vary.rs @@ -1,4 +1,5 @@ use http::{HeaderName, HeaderValue}; +use std::iter::FromIterator; use crate::util::FlatCsv; @@ -59,6 +60,15 @@ impl From for Vary { } } +impl FromIterator for Vary { + fn from_iter(iter: I) -> Self + where + I: IntoIterator, + { + Vary(iter.into_iter().map(HeaderValue::from).collect()) + } +} + /* test_vary { test_header!(test1, vec![b"accept-encoding, accept-language"]); @@ -80,10 +90,34 @@ test_vary { #[cfg(test)] mod tests { + use http::header::{ACCEPT_ENCODING, ACCEPT_LANGUAGE}; + use super::*; #[test] fn any_is_any() { assert!(Vary::any().is_any()); } + + #[test] + fn from_header_name() { + let vary = Vary::from(ACCEPT_ENCODING); + + assert!(!vary.is_any()); + assert_eq!( + vary.iter_strs().collect::>(), + vec![ACCEPT_ENCODING.as_str()] + ); + } + + #[test] + fn from_iter_header_name() { + let vary = Vary::from_iter([ACCEPT_ENCODING, ACCEPT_LANGUAGE]); + + assert!(!vary.is_any()); + assert_eq!( + vary.iter_strs().collect::>(), + vec![ACCEPT_ENCODING.as_str(), ACCEPT_LANGUAGE.as_str()] + ); + } }