hyperx/header/common/
vary.rs

1use unicase::Ascii;
2
3header! {
4    /// `Vary` header, defined in [RFC7231](https://tools.ietf.org/html/rfc7231#section-7.1.4)
5    ///
6    /// The "Vary" header field in a response describes what parts of a
7    /// request message, aside from the method, Host header field, and
8    /// request target, might influence the origin server's process for
9    /// selecting and representing this response.  The value consists of
10    /// either a single asterisk ("*") or a list of header field names
11    /// (case-insensitive).
12    ///
13    /// # ABNF
14    ///
15    /// ```text
16    /// Vary = "*" / 1#field-name
17    /// ```
18    ///
19    /// # Example values
20    ///
21    /// * `accept-encoding, accept-language`
22    ///
23    /// # Example
24    ///
25    /// ```
26    /// # extern crate http;
27    /// use hyperx::header::{TypedHeaders, Vary};
28    ///
29    /// let mut headers = http::HeaderMap::new();
30    /// headers.encode(&Vary::Any);
31    /// ```
32    ///
33    /// # Example
34    ///
35    /// ```
36    /// # extern crate http;
37    /// # extern crate hyperx;
38    /// # extern crate unicase;
39    /// # fn main() {
40    /// // extern crate unicase;
41    ///
42    /// use hyperx::header::{TypedHeaders, Vary};
43    /// use unicase::Ascii;
44    ///
45    /// let mut headers = http::HeaderMap::new();
46    /// headers.encode(
47    ///     &Vary::Items(vec![
48    ///         Ascii::new("accept-encoding".to_owned()),
49    ///         Ascii::new("accept-language".to_owned()),
50    ///     ])
51    /// );
52    /// # }
53    /// ```
54    (Vary, "Vary") => {Any / (Ascii<String>)+}
55
56    test_vary {
57        test_header!(test1, vec![b"accept-encoding, accept-language"]);
58
59        #[test]
60        fn test2() {
61            let mut vary: ::Result<Vary>;
62            let r: Raw = "*".into();
63            vary = Header::parse_header(&r);
64            assert_eq!(vary.ok(), Some(Vary::Any));
65
66            let r: Raw = "etag,cookie,allow".into();
67            vary = Header::parse_header(&r);
68            assert_eq!(
69                vary.ok(),
70                Some(Vary::Items(vec![
71                    "eTag".parse().unwrap(),
72                    "cookIE".parse().unwrap(),
73                    "AlLOw".parse().unwrap(),
74                ])));
75        }
76    }
77}
78
79standard_header!(Vary, VARY);