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}