hyperx/header/common/
accept_language.rs

1use language_tags::LanguageTag;
2use header::QualityItem;
3
4header! {
5    /// `Accept-Language` header, defined in
6    /// [RFC7231](http://tools.ietf.org/html/rfc7231#section-5.3.5)
7    ///
8    /// The `Accept-Language` header field can be used by user agents to
9    /// indicate the set of natural languages that are preferred in the
10    /// response.
11    ///
12    /// # ABNF
13    ///
14    /// ```text
15    /// Accept-Language = 1#( language-range [ weight ] )
16    /// language-range  = <language-range, see [RFC4647], Section 2.1>
17    /// ```
18    ///
19    /// # Example values
20    /// * `da, en-gb;q=0.8, en;q=0.7`
21    /// * `en-us;q=1.0, en;q=0.5, fr`
22    ///
23    /// # Examples
24    ///
25    /// ```
26    /// # extern crate http;
27    /// use hyperx::header::{AcceptLanguage, qitem, TypedHeaders};
28    ///
29    /// let mut headers = http::HeaderMap::new();
30    /// let mut langtag = "en-US".parse().unwrap();
31    /// headers.encode(
32    ///     &AcceptLanguage(vec![
33    ///         qitem(langtag),
34    ///     ])
35    /// );
36    /// ```
37    ///
38    /// ```
39    /// # extern crate http;
40    /// # extern crate hyperx;
41    /// # #[macro_use] extern crate language_tags;
42    /// # use hyperx::header::{AcceptLanguage, QualityItem, q, qitem, TypedHeaders};
43    /// #
44    /// # fn main() {
45    /// let mut headers = http::HeaderMap::new();
46    /// headers.encode(
47    ///     &AcceptLanguage(vec![
48    ///         qitem("da".parse().unwrap()),
49    ///         QualityItem::new("en-US".parse().unwrap(), q(800)),
50    ///         QualityItem::new("en".parse().unwrap(), q(700)),
51    ///     ])
52    /// );
53    /// # }
54    /// ```
55    (AcceptLanguage, "Accept-Language") => (QualityItem<LanguageTag>)+
56
57    test_accept_language {
58        // From the RFC
59        test_header!(test1, vec![b"da, en-gb;q=0.8, en;q=0.7"]);
60        // Own test
61        test_header!(
62            test2, vec![b"en-US, en; q=0.5, fr"],
63            Some(AcceptLanguage(vec![
64                qitem("en-US".parse().unwrap()),
65                QualityItem::new("en".parse().unwrap(), q(500)),
66                qitem("fr".parse().unwrap()),
67        ])));
68    }
69}
70
71bench_header!(bench, AcceptLanguage,
72              { vec![b"en-us;q=1.0, en;q=0.5, fr".to_vec()] });
73
74standard_header!(AcceptLanguage, ACCEPT_LANGUAGE);