mco_http/header/common/
accept_encoding.rs

1use crate::header::{Encoding, QualityItem};
2
3header! {
4    /// `Accept-Encoding` header, defined in
5    /// [RFC7231](http://tools.ietf.org/html/rfc7231#section-5.3.4)
6    ///
7    /// The `Accept-Encoding` header field can be used by user agents to
8    /// indicate what response content-codings are
9    /// acceptable in the response.  An  `identity` token is used as a synonym
10    /// for "no encoding" in order to communicate when no encoding is
11    /// preferred.
12    ///
13    /// # ABNF
14    /// ```plain
15    /// Accept-Encoding  = #( codings [ weight ] )
16    /// codings          = content-coding / "identity" / "*"
17    /// ```
18    ///
19    /// # Example values
20    /// * `compress, gzip`
21    /// * ``
22    /// * `*`
23    /// * `compress;q=0.5, gzip;q=1`
24    /// * `gzip;q=1.0, identity; q=0.5, *;q=0`
25    ///
26    /// # Examples
27    /// ```
28    /// use mco_http::header::{Headers, AcceptEncoding, Encoding, qitem};
29    ///
30    /// let mut headers = Headers::new();
31    /// headers.set(
32    ///     AcceptEncoding(vec![qitem(Encoding::Chunked)])
33    /// );
34    /// ```
35    /// ```
36    /// use mco_http::header::{Headers, AcceptEncoding, Encoding, qitem};
37    ///
38    /// let mut headers = Headers::new();
39    /// headers.set(
40    ///     AcceptEncoding(vec![
41    ///         qitem(Encoding::Chunked),
42    ///         qitem(Encoding::Gzip),
43    ///         qitem(Encoding::Deflate),
44    ///     ])
45    /// );
46    /// ```
47    /// ```
48    /// use mco_http::header::{Headers, AcceptEncoding, Encoding, QualityItem, Quality, qitem};
49    ///
50    /// let mut headers = Headers::new();
51    /// headers.set(
52    ///     AcceptEncoding(vec![
53    ///         qitem(Encoding::Chunked),
54    ///         QualityItem::new(Encoding::Gzip, Quality(600)),
55    ///         QualityItem::new(Encoding::EncodingExt("*".to_owned()), Quality(0)),
56    ///     ])
57    /// );
58    /// ```
59    (AcceptEncoding, "Accept-Encoding") => (QualityItem<Encoding>)*
60
61    test_accept_encoding {
62        // From the RFC
63        test_header!(test1, vec![b"compress, gzip"]);
64        test_header!(test2, vec![b""], Some(AcceptEncoding(vec![])));
65        test_header!(test3, vec![b"*"]);
66        // Note: Removed quality 1 from gzip
67        test_header!(test4, vec![b"compress;q=0.5, gzip"]);
68        // Note: Removed quality 1 from gzip
69        test_header!(test5, vec![b"gzip, identity; q=0.5, *;q=0"]);
70    }
71}