feat(langtags): use true language tags in headers
Make hyper dependant on rust-language-tags providing complete parsing and formatting of language tags. Remove builtin solution for simple tags. BREAKING CHANGE: AcceptLanguage and ContentLanguage use LanguageTag now, Language removed from Hyper.
This commit is contained in:
		| @@ -1,4 +1,5 @@ | ||||
| use header::{Language, QualityItem}; | ||||
| use language_tags::LanguageTag; | ||||
| use header::QualityItem; | ||||
|  | ||||
| header! { | ||||
|     #[doc="`Accept-Language` header, defined in"] | ||||
| @@ -20,61 +21,47 @@ header! { | ||||
|     #[doc=""] | ||||
|     #[doc="# Examples"] | ||||
|     #[doc="```"] | ||||
|     #[doc="use hyper::header::{Headers, AcceptLanguage, Language, qitem};"] | ||||
|     #[doc="use hyper::LanguageTag;"] | ||||
|     #[doc="use hyper::header::{Headers, AcceptLanguage, qitem};"] | ||||
|     #[doc=""] | ||||
|     #[doc="let mut headers = Headers::new();"] | ||||
|     #[doc="let mut langtag: LanguageTag = Default::default();"] | ||||
|     #[doc="langtag.language = Some(\"en\".to_owned());"] | ||||
|     #[doc="langtag.region = Some(\"US\".to_owned());"] | ||||
|     #[doc="headers.set("] | ||||
|     #[doc="    AcceptLanguage(vec!["] | ||||
|     #[doc="        qitem("] | ||||
|     #[doc="            Language {"] | ||||
|     #[doc="                 primary: \"en\".to_owned(),"] | ||||
|     #[doc="                 sub: Some(\"us\".to_owned()),"] | ||||
|     #[doc="            }"] | ||||
|     #[doc="        ),"] | ||||
|     #[doc="        qitem(langtag),"] | ||||
|     #[doc="    ])"] | ||||
|     #[doc=");"] | ||||
|     #[doc="```"] | ||||
|     #[doc="```"] | ||||
|     #[doc="use hyper::header::{Headers, AcceptLanguage, Language, QualityItem, Quality, qitem};"] | ||||
|     #[doc=""] | ||||
|     #[doc="# extern crate hyper;"] | ||||
|     #[doc="# #[macro_use] extern crate language_tags;"] | ||||
|     #[doc="# use hyper::header::{Headers, AcceptLanguage, QualityItem, Quality, qitem};"] | ||||
|     #[doc="# "] | ||||
|     #[doc="# fn main() {"] | ||||
|     #[doc="let mut headers = Headers::new();"] | ||||
|     #[doc="headers.set("] | ||||
|     #[doc="    AcceptLanguage(vec!["] | ||||
|     #[doc="        qitem("] | ||||
|     #[doc="            Language {"] | ||||
|     #[doc="                primary: \"da\".to_owned(),"] | ||||
|     #[doc="                sub: None,"] | ||||
|     #[doc="             }"] | ||||
|     #[doc="        ),"] | ||||
|     #[doc="        QualityItem::new("] | ||||
|     #[doc="            Language {"] | ||||
|     #[doc="                primary: \"en\".to_owned(),"] | ||||
|     #[doc="                sub: Some(\"gb\".to_owned()),"] | ||||
|     #[doc="            },"] | ||||
|     #[doc="            Quality(800),"] | ||||
|     #[doc="        ),"] | ||||
|     #[doc="        QualityItem::new("] | ||||
|     #[doc="            Language {"] | ||||
|     #[doc="                primary: \"en\".to_owned(),"] | ||||
|     #[doc="                sub: None,"] | ||||
|     #[doc="            },"] | ||||
|     #[doc="            Quality(700),"] | ||||
|     #[doc="        ),"] | ||||
|     #[doc="        qitem(langtag!(da)),"] | ||||
|     #[doc="        QualityItem::new(langtag!(en;;;GB), Quality(800)),"] | ||||
|     #[doc="        QualityItem::new(langtag!(en), Quality(700)),"] | ||||
|     #[doc="    ])"] | ||||
|     #[doc=");"] | ||||
|     #[doc="# }"] | ||||
|     #[doc="```"] | ||||
|     (AcceptLanguage, "Accept-Language") => (QualityItem<Language>)+ | ||||
|     (AcceptLanguage, "Accept-Language") => (QualityItem<LanguageTag>)+ | ||||
|  | ||||
|     test_accept_language { | ||||
|         // From the RFC | ||||
|         test_header!(test1, vec![b"da, en-gb;q=0.8, en;q=0.7"]); | ||||
|         // Own test | ||||
|         test_header!( | ||||
|             test2, vec![b"en-us, en; q=0.5, fr"], | ||||
|             test2, vec![b"en-US, en; q=0.5, fr"], | ||||
|             Some(AcceptLanguage(vec![ | ||||
|                 qitem(Language {primary: "en".to_owned(), sub: Some("us".to_owned())}), | ||||
|                 QualityItem::new(Language{primary: "en".to_owned(), sub: None}, Quality(500)), | ||||
|                 qitem(Language {primary: "fr".to_owned(), sub: None}), | ||||
|                 qitem(langtag!(en;;;US)), | ||||
|                 QualityItem::new(langtag!(en), Quality(500)), | ||||
|                 qitem(langtag!(fr)), | ||||
|         ]))); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user