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);