Skip to content

Commit 7235d3f

Browse files
committed
Merge pull request #332 from pyfisch/improvquality
refactor(headers): Use u16 based newtype for quality value
2 parents b1b8bf1 + 8f6ce45 commit 7235d3f

File tree

6 files changed

+199
-111
lines changed

6 files changed

+199
-111
lines changed

src/header/common/accept.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ impl_list_header!(Accept,
3333
mod tests {
3434
use mime::*;
3535

36-
use header::{Header, QualityItem, qitem};
36+
use header::{Header, Quality, QualityItem, qitem};
37+
3738
use super::Accept;
3839

3940
#[test]
@@ -49,7 +50,7 @@ mod tests {
4950
fn test_parse_header_with_quality() {
5051
let a: Accept = Header::parse_header([b"text/plain; charset=utf-8; q=0.5".to_vec()].as_slice()).unwrap();
5152
let b = Accept(vec![
52-
QualityItem::new(Mime(TopLevel::Text, SubLevel::Plain, vec![(Attr::Charset, Value::Utf8)]), 0.5f32),
53+
QualityItem::new(Mime(TopLevel::Text, SubLevel::Plain, vec![(Attr::Charset, Value::Utf8)]), Quality(500)),
5354
]);
5455
assert_eq!(a, b);
5556
}

src/header/common/accept_encoding.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ impl_list_header!(AcceptEncoding,
1313

1414
#[cfg(test)]
1515
mod tests {
16-
use header::{Encoding, Header, QualityItem};
16+
use header::{Encoding, Header, qitem, Quality, QualityItem};
1717

1818
use super::*;
1919

2020
#[test]
2121
fn test_parse_header() {
2222
let a: AcceptEncoding = Header::parse_header([b"gzip;q=1.0, identity; q=0.5".to_vec()].as_slice()).unwrap();
2323
let b = AcceptEncoding(vec![
24-
QualityItem{item: Encoding::Gzip, quality: 1f32},
25-
QualityItem{item: Encoding::Identity, quality: 0.5f32},
24+
qitem(Encoding::Gzip),
25+
QualityItem::new(Encoding::Identity, Quality(500)),
2626
]);
2727
assert_eq!(a, b);
2828
}

src/header/common/accept_language.rs

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -46,41 +46,45 @@ impl_list_header!(AcceptLanguage,
4646
"Accept-Language",
4747
Vec<QualityItem<Language>>);
4848

49-
bench_header!(bench, AcceptLanguage,
50-
{ vec![b"en-us;q=1.0, en;q=0.5, fr".to_vec()] });
49+
#[cfg(test)]
50+
mod tests {
51+
use header::{Header, qitem, Quality, QualityItem};
5152

52-
#[test]
53-
fn test_parse_header() {
54-
let a: AcceptLanguage = header::Header::parse_header(
55-
[b"en-us;q=1.0, en;q=0.5, fr".to_vec()].as_slice()).unwrap();
56-
let b = AcceptLanguage(vec![
57-
QualityItem { item: Language{primary: "en".to_string(),
58-
sub: Some("us".to_string())},
59-
quality: 1f32 },
60-
QualityItem { item: Language{primary: "en".to_string(), sub: None},
61-
quality: 0.5f32 },
62-
QualityItem { item: Language{primary: "fr".to_string(), sub: None},
63-
quality: 1f32 },
64-
]);
65-
assert_eq!(format!("{}", a), format!("{}", b));
66-
assert_eq!(a, b);
67-
}
53+
use super::*;
6854

69-
#[test]
70-
fn test_display() {
71-
assert_eq!("en".to_string(),
72-
format!("{}", Language{primary: "en".to_string(),
73-
sub: None}));
74-
assert_eq!("en-us".to_string(),
75-
format!("{}", Language{primary: "en".to_string(),
76-
sub: Some("us".to_string())}));
77-
}
55+
#[test]
56+
fn test_parse_header() {
57+
let a: AcceptLanguage = Header::parse_header(
58+
[b"en-us;q=1.0, en;q=0.5, fr".to_vec()].as_slice()).unwrap();
59+
let b = AcceptLanguage(vec![
60+
qitem(Language{primary: "en".to_string(), sub: Some("us".to_string())}),
61+
QualityItem::new(Language{primary: "en".to_string(), sub: None},
62+
Quality(500)),
63+
qitem(Language{primary: "fr".to_string(), sub: None}),
64+
]);
65+
assert_eq!(format!("{}", a), format!("{}", b));
66+
assert_eq!(a, b);
67+
}
7868

79-
#[test]
80-
fn test_from_str() {
81-
assert_eq!(Language { primary: "en".to_string(), sub: None },
82-
"en".parse().unwrap());
83-
assert_eq!(Language { primary: "en".to_string(),
84-
sub: Some("us".to_string()) },
85-
"en-us".parse().unwrap());
69+
#[test]
70+
fn test_display() {
71+
assert_eq!("en".to_string(),
72+
format!("{}", Language{primary: "en".to_string(),
73+
sub: None}));
74+
assert_eq!("en-us".to_string(),
75+
format!("{}", Language{primary: "en".to_string(),
76+
sub: Some("us".to_string())}));
77+
}
78+
79+
#[test]
80+
fn test_from_str() {
81+
assert_eq!(Language { primary: "en".to_string(), sub: None },
82+
"en".parse().unwrap());
83+
assert_eq!(Language { primary: "en".to_string(),
84+
sub: Some("us".to_string()) },
85+
"en-us".parse().unwrap());
86+
}
8687
}
88+
89+
bench_header!(bench, AcceptLanguage,
90+
{ vec![b"en-us;q=1.0, en;q=0.5, fr".to_vec()] });

src/header/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use unicase::UniCase;
2121
use self::cell::OptCell;
2222
use {http, HttpResult, HttpError};
2323

24-
pub use self::shared::{Encoding, EntityTag, QualityItem, qitem};
24+
pub use self::shared::{Encoding, EntityTag, Quality, QualityItem, qitem};
2525
pub use self::common::*;
2626

2727
mod cell;
@@ -540,7 +540,7 @@ mod tests {
540540
use mime::TopLevel::Text;
541541
use mime::SubLevel::Plain;
542542
use super::{Headers, Header, HeaderFormat, ContentLength, ContentType,
543-
Accept, Host, QualityItem};
543+
Accept, Host, qitem};
544544

545545
use test::Bencher;
546546

@@ -562,7 +562,7 @@ mod tests {
562562

563563
#[test]
564564
fn test_accept() {
565-
let text_plain = QualityItem{item: Mime(Text, Plain, vec![]), quality: 1f32};
565+
let text_plain = qitem(Mime(Text, Plain, vec![]));
566566
let application_vendor = "application/vnd.github.v3.full+json; q=0.5".parse().unwrap();
567567

568568
let accept = Header::parse_header([b"text/plain".to_vec()].as_slice());

src/header/shared/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
pub use self::encoding::Encoding;
22
pub use self::entity::EntityTag;
3-
pub use self::quality_item::{QualityItem, qitem};
3+
pub use self::quality_item::{Quality, QualityItem, qitem};
44

55
mod encoding;
66
mod entity;

0 commit comments

Comments
 (0)