Skip to content

Commit 621ef52

Browse files
committed
fix(headers): Fix formatting of 0 qualites and formatting of empty list header fields.
1 parent 29c8dd1 commit 621ef52

File tree

4 files changed

+19
-33
lines changed

4 files changed

+19
-33
lines changed

src/header/common/accept_encoding.rs

+2-19
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,7 @@ header! {
2424
test_header!(test3, vec![b"*"]);
2525
// Note: Removed quality 1 from gzip
2626
test_header!(test4, vec![b"compress;q=0.5, gzip"]);
27-
// FIXME: Formatting of 0 as quality value
28-
// test_header!(test5, vec![b"gzip;q=1.0, identity; q=0.5, *;q=0"]);
29-
}
30-
}
31-
32-
#[cfg(test)]
33-
mod tests {
34-
use header::{Encoding, Header, qitem, Quality, QualityItem};
35-
36-
use super::*;
37-
38-
#[test]
39-
fn test_parse_header() {
40-
let a: AcceptEncoding = Header::parse_header([b"gzip;q=1.0, identity; q=0.5".to_vec()].as_ref()).unwrap();
41-
let b = AcceptEncoding(vec![
42-
qitem(Encoding::Gzip),
43-
QualityItem::new(Encoding::Identity, Quality(500)),
44-
]);
45-
assert_eq!(a, b);
27+
// Note: Removed quality 1 from gzip
28+
test_header!(test5, vec![b"gzip, identity; q=0.5, *;q=0"]);
4629
}
4730
}

src/header/common/allow.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,10 @@ header! {
3535
Method::Connect,
3636
Method::Patch,
3737
Method::Extension("fOObAr".to_string())])));
38-
// FIXME: Formatting fails
39-
// test_header!(
40-
// test3,
41-
// vec![b""],
42-
// Some(HeaderField(Vec::<Method>::new())));
38+
test_header!(
39+
test3,
40+
vec![b""],
41+
Some(HeaderField(Vec::<Method>::new())));
4342
}
4443
}
4544

src/header/parsing.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,12 @@ pub fn from_one_comma_delimited<T: str::FromStr>(raw: &[u8]) -> Option<Vec<T>> {
4040
}
4141

4242
/// Format an array into a comma-delimited string.
43-
pub fn fmt_comma_delimited<T: fmt::Display>(fmt: &mut fmt::Formatter, parts: &[T]) -> fmt::Result {
44-
let last = parts.len() - 1;
43+
pub fn fmt_comma_delimited<T: fmt::Display>(f: &mut fmt::Formatter, parts: &[T]) -> fmt::Result {
4544
for (i, part) in parts.iter().enumerate() {
46-
try!(write!(fmt, "{}", part));
47-
if i < last {
48-
try!(write!(fmt, ", "));
45+
if i > 0 {
46+
try!(write!(f, ", "));
4947
}
48+
try!(write!(f, "{}", part));
5049
}
5150
Ok(())
5251
}

src/header/shared/quality_item.rs

+9-4
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ pub struct Quality(pub u16);
2424

2525
impl fmt::Display for Quality {
2626
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
27-
if self.0 == 1000 {
28-
write!(f, "")
29-
} else {
30-
write!(f, "; q=0.{}", format!("{:03}", self.0).trim_right_matches('0'))
27+
match self.0 {
28+
1000 => Ok(()),
29+
0 => f.write_str("; q=0"),
30+
x => write!(f, "; q=0.{}", format!("{:03}", x).trim_right_matches('0'))
3131
}
3232
}
3333
}
@@ -196,6 +196,11 @@ mod tests {
196196
assert_eq!(q(0.5), Quality(500));
197197
}
198198

199+
#[test]
200+
fn test_quality2() {
201+
assert_eq!(format!("{}", q(0.0)), "; q=0");
202+
}
203+
199204
#[test]
200205
#[should_panic]
201206
fn test_quality_invalid() {

0 commit comments

Comments
 (0)