hyper_sync/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 /// use hyper_sync::header::{Headers, Vary};
27 ///
28 /// let mut headers = Headers::new();
29 /// headers.set(Vary::Any);
30 /// ```
31 ///
32 /// # Example
33 ///
34 /// ```
35 /// # extern crate hyper_sync;
36 /// # extern crate unicase;
37 /// # fn main() {
38 /// // extern crate unicase;
39 ///
40 /// use hyper_sync::header::{Headers, Vary};
41 /// use unicase::Ascii;
42 ///
43 /// let mut headers = Headers::new();
44 /// headers.set(
45 /// Vary::Items(vec![
46 /// Ascii::new("accept-encoding".to_owned()),
47 /// Ascii::new("accept-language".to_owned()),
48 /// ])
49 /// );
50 /// # }
51 /// ```
52 (Vary, "Vary") => {Any / (Ascii<String>)+}
53
54 test_vary {
55 test_header!(test1, vec![b"accept-encoding, accept-language"]);
56
57 #[test]
58 fn test2() {
59 let mut vary: ::Result<Vary>;
60
61 vary = Header::parse_header(&"*".into());
62 assert_eq!(vary.ok(), Some(Vary::Any));
63
64 vary = Header::parse_header(&"etag,cookie,allow".into());
65 assert_eq!(vary.ok(), Some(Vary::Items(vec!["eTag".parse().unwrap(),
66 "cookIE".parse().unwrap(),
67 "AlLOw".parse().unwrap(),])));
68 }
69 }
70}