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);