Skip to content

Commit 2d14c19

Browse files
committed
adding an alternate delimiter
1 parent d8ab6af commit 2d14c19

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

src/util/quality_value.rs

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,22 @@ pub(crate) trait QualityDelimiter {
1616
const STR: &'static str;
1717
}
1818

19+
/// enum that represents the ';q=' delimiter
1920
#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
2021
pub(crate) enum SemiQ {}
2122

2223
impl QualityDelimiter for SemiQ {
2324
const STR: &'static str = ";q=";
2425
}
2526

27+
/// enum that represents the ';level=' delimiter (extremely rare)
28+
#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
29+
pub(crate) enum SemiLevel {}
30+
31+
impl QualityDelimiter for SemiLevel {
32+
const STR: &'static str = ";level=";
33+
}
34+
2635
#[derive(Clone, Debug, PartialEq, Eq)]
2736
struct QualityMeta<'a, Sep = SemiQ> {
2837
pub data: &'a str,
@@ -119,14 +128,12 @@ impl<Delm: QualityDelimiter> TryFromValues for QualityValue<Delm> {
119128
#[cfg(test)]
120129
mod tests {
121130
use super::*;
122-
use util::flat_csv::Comma;
123131
use HeaderValue;
124132

125133
#[test]
126134
fn multiple_qualities() {
127135
let val = HeaderValue::from_static("gzip;q=1, br;q=0.8");
128-
let csv = FlatCsv::<Comma>::from(val);
129-
let qual = QualityValue::<SemiQ>::from(csv);
136+
let qual = QualityValue::<SemiQ>::from(val);
130137

131138
let mut values = qual.iter();
132139
assert_eq!(values.next(), Some("gzip"));
@@ -137,8 +144,7 @@ mod tests {
137144
#[test]
138145
fn multiple_qualities_wrong_order() {
139146
let val = HeaderValue::from_static("br;q=0.8, gzip;q=1");
140-
let csv = FlatCsv::<Comma>::from(val);
141-
let qual = QualityValue::<SemiQ>::from(csv);
147+
let qual = QualityValue::<SemiQ>::from(val);
142148

143149
let mut values = qual.iter();
144150
assert_eq!(values.next(), Some("gzip"));
@@ -149,8 +155,7 @@ mod tests {
149155
#[test]
150156
fn multiple_values() {
151157
let val = HeaderValue::from_static("deflate, gzip;q=1, br;q=0.8");
152-
let csv = FlatCsv::<Comma>::from(val);
153-
let qual = QualityValue::<SemiQ>::from(csv);
158+
let qual = QualityValue::<SemiQ>::from(val);
154159

155160
let mut values = qual.iter();
156161
assert_eq!(values.next(), Some("deflate"));
@@ -162,8 +167,7 @@ mod tests {
162167
#[test]
163168
fn multiple_values_wrong_order() {
164169
let val = HeaderValue::from_static("deflate, br;q=0.8, gzip;q=1, *;q=0.1");
165-
let csv = FlatCsv::<Comma>::from(val);
166-
let qual = QualityValue::<SemiQ>::from(csv);
170+
let qual = QualityValue::<SemiQ>::from(val);
167171

168172
let mut values = qual.iter();
169173
assert_eq!(values.next(), Some("deflate"));
@@ -172,4 +176,16 @@ mod tests {
172176
assert_eq!(values.next(), Some("*"));
173177
assert_eq!(values.next(), None);
174178
}
179+
180+
#[test]
181+
fn alternate_delimiter() {
182+
let val = HeaderValue::from_static("deflate, br;level=0.8, gzip;level=1");
183+
let qual = QualityValue::<SemiLevel>::from(val);
184+
185+
let mut values = qual.iter();
186+
assert_eq!(values.next(), Some("deflate"));
187+
assert_eq!(values.next(), Some("gzip"));
188+
assert_eq!(values.next(), Some("br"));
189+
assert_eq!(values.next(), None);
190+
}
175191
}

0 commit comments

Comments
 (0)