requiem_http/header/common/
accept_language.rs

1use crate::header::{QualityItem, ACCEPT_LANGUAGE};
2use language_tags::LanguageTag;
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    /// ```rust
26    /// # extern crate requiem_http;
27    /// # extern crate language_tags;
28    /// use requiem_http::Response;
29    /// use requiem_http::http::header::{AcceptLanguage, LanguageTag, qitem};
30    ///
31    /// # fn main() {
32    /// let mut builder = Response::Ok();
33    /// let mut langtag: LanguageTag = Default::default();
34    /// langtag.language = Some("en".to_owned());
35    /// langtag.region = Some("US".to_owned());
36    /// builder.set(
37    ///     AcceptLanguage(vec![
38    ///         qitem(langtag),
39    ///     ])
40    /// );
41    /// # }
42    /// ```
43    ///
44    /// ```rust
45    /// # extern crate requiem_http;
46    /// # #[macro_use] extern crate language_tags;
47    /// use requiem_http::Response;
48    /// use requiem_http::http::header::{AcceptLanguage, QualityItem, q, qitem};
49    /// #
50    /// # fn main() {
51    /// let mut builder = Response::Ok();
52    /// builder.set(
53    ///     AcceptLanguage(vec![
54    ///         qitem(langtag!(da)),
55    ///         QualityItem::new(langtag!(en;;;GB), q(800)),
56    ///         QualityItem::new(langtag!(en), q(700)),
57    ///     ])
58    /// );
59    /// # }
60    /// ```
61    (AcceptLanguage, ACCEPT_LANGUAGE) => (QualityItem<LanguageTag>)+
62
63    test_accept_language {
64        // From the RFC
65        test_header!(test1, vec![b"da, en-gb;q=0.8, en;q=0.7"]);
66        // Own test
67        test_header!(
68            test2, vec![b"en-US, en; q=0.5, fr"],
69            Some(AcceptLanguage(vec![
70                qitem("en-US".parse().unwrap()),
71                QualityItem::new("en".parse().unwrap(), q(500)),
72                qitem("fr".parse().unwrap()),
73        ])));
74    }
75}