From b5dc79e8788c2c5e126fce300b07650b7c6c1e3f Mon Sep 17 00:00:00 2001 From: Denis Cornehl Date: Tue, 24 Feb 2026 06:58:08 +0100 Subject: [PATCH] Add FromIterator to Vary header --- src/common/vary.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) 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()] + ); + } }