cogo_http/header/common/
vary.rs

1use unicase::UniCase;
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    /// ```plain
15    /// Vary = "*" / 1#field-name
16    /// ```
17    ///
18    /// # Example values
19    /// * `accept-encoding, accept-language`
20    ///
21    /// # Example
22    /// ```
23    /// use cogo_http::header::{Headers, Vary};
24    ///
25    /// let mut headers = Headers::new();
26    /// headers.set(Vary::Any);
27    /// ```
28    ///
29    /// # Example
30    /// ```
31    /// # extern crate cogo_http;
32    /// # extern crate unicase;
33    /// # fn main() {
34    /// // extern crate unicase;
35    ///
36    /// use cogo_http::header::{Headers, Vary};
37    /// use unicase::UniCase;
38    ///
39    /// let mut headers = Headers::new();
40    /// headers.set(
41    ///     Vary::Items(vec![
42    ///         UniCase("accept-encoding".to_owned()),
43    ///         UniCase("accept-language".to_owned()),
44    ///     ])
45    /// );
46    /// # }
47    /// ```
48    (Vary, "Vary") => {Any / (UniCase<String>)+}
49
50    test_vary {
51        test_header!(test1, vec![b"accept-encoding, accept-language"]);
52
53        #[test]
54        fn test2() {
55            let mut vary: crate::Result<Vary>;
56
57            vary = Header::parse_header([b"*".to_vec()].as_ref());
58            assert_eq!(vary.ok(), Some(Vary::Any));
59
60            vary = Header::parse_header([b"etag,cookie,allow".to_vec()].as_ref());
61            assert_eq!(vary.ok(), Some(Vary::Items(vec!["eTag".parse().unwrap(),
62                                                        "cookIE".parse().unwrap(),
63                                                        "AlLOw".parse().unwrap(),])));
64        }
65    }
66}