@@ -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 ) ]
2021pub ( crate ) enum SemiQ { }
2122
2223impl 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 ) ]
2736struct QualityMeta < ' a , Sep = SemiQ > {
2837 pub data : & ' a str ,
@@ -119,14 +128,12 @@ impl<Delm: QualityDelimiter> TryFromValues for QualityValue<Delm> {
119128#[ cfg( test) ]
120129mod 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