1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
use util::FlatCsv; use {HeaderValue}; /// `Vary` header, defined in [RFC7231](https://tools.ietf.org/html/rfc7231#section-7.1.4) /// /// The "Vary" header field in a response describes what parts of a /// request message, aside from the method, Host header field, and /// request target, might influence the origin server's process for /// selecting and representing this response. The value consists of /// either a single asterisk ("*") or a list of header field names /// (case-insensitive). /// /// # ABNF /// /// ```text /// Vary = "*" / 1#field-name /// ``` /// /// # Example values /// /// * `accept-encoding, accept-language` /// /// # Example /// /// ``` /// # extern crate headers; /// use headers::Vary; /// /// let vary = Vary::any(); /// ``` #[derive(Debug, Clone, PartialEq)] pub struct Vary(FlatCsv); derive_header! { Vary(_), name: VARY } impl Vary { /// Create a new `Very: *` header. pub fn any() -> Vary { Vary(HeaderValue::from_static("*").into()) } /// Check if this includes `*`. pub fn is_any(&self) -> bool { self.0.iter().any(|val| val == "*") } /// Iterate the header names of this `Vary`. pub fn iter_strs(&self) -> impl Iterator<Item = &str> { self.0.iter() } } /* test_vary { test_header!(test1, vec![b"accept-encoding, accept-language"]); #[test] fn test2() { let mut vary: ::Result<Vary>; vary = Header::parse_header(&"*".into()); assert_eq!(vary.ok(), Some(Vary::Any)); vary = Header::parse_header(&"etag,cookie,allow".into()); assert_eq!(vary.ok(), Some(Vary::Items(vec!["eTag".parse().unwrap(), "cookIE".parse().unwrap(), "AlLOw".parse().unwrap(),]))); } } */ #[cfg(test)] mod tests { use super::*; #[test] fn any_is_any() { assert!(Vary::any().is_any()); } }