1
- //! Provides a struct for quality values.
2
- //!
3
- //! [RFC7231 Section 5.3.1](https://tools.ietf.org/html/rfc7231#section-5.3.1)
4
- //! gives more information on quality values in HTTP header fields.
5
-
6
1
use std:: cmp;
7
2
use std:: default:: Default ;
8
3
use std:: fmt;
@@ -19,6 +14,9 @@ use std::str;
19
14
/// floating point data type (`f32`) consumes four bytes, hyper uses an `u16` value to store the
20
15
/// quality internally. For performance reasons you may set quality directly to a value between
21
16
/// 0 and 1000 e.g. `Quality(532)` matches the quality `q=0.532`.
17
+ ///
18
+ /// [RFC7231 Section 5.3.1](https://tools.ietf.org/html/rfc7231#section-5.3.1)
19
+ /// gives more information on quality values in HTTP header fields.
22
20
#[ derive( Copy , Clone , Debug , Eq , Ord , PartialEq , PartialOrd ) ]
23
21
pub struct Quality ( pub u16 ) ;
24
22
@@ -73,8 +71,8 @@ impl<T: fmt::Display> fmt::Display for QualityItem<T> {
73
71
}
74
72
75
73
impl < T : str:: FromStr > str:: FromStr for QualityItem < T > {
76
- type Err = ( ) ;
77
- fn from_str ( s : & str ) -> Result < Self , ( ) > {
74
+ type Err = :: Error ;
75
+ fn from_str ( s : & str ) -> :: Result < QualityItem < T > > {
78
76
// Set defaults used if parsing fails.
79
77
let mut raw_item = s;
80
78
let mut quality = 1f32 ;
@@ -85,25 +83,25 @@ impl<T: str::FromStr> str::FromStr for QualityItem<T> {
85
83
if start == "q=" || start == "Q=" {
86
84
let q_part = & parts[ 0 ] [ 2 ..parts[ 0 ] . len ( ) ] ;
87
85
if q_part. len ( ) > 5 {
88
- return Err ( ( ) ) ;
86
+ return Err ( :: Error :: Header ) ;
89
87
}
90
88
match q_part. parse :: < f32 > ( ) {
91
89
Ok ( q_value) => {
92
90
if 0f32 <= q_value && q_value <= 1f32 {
93
91
quality = q_value;
94
92
raw_item = parts[ 1 ] ;
95
93
} else {
96
- return Err ( ( ) ) ;
94
+ return Err ( :: Error :: Header ) ;
97
95
}
98
96
} ,
99
- Err ( _) => return Err ( ( ) ) ,
97
+ Err ( _) => return Err ( :: Error :: Header ) ,
100
98
}
101
99
}
102
100
}
103
101
match raw_item. parse :: < T > ( ) {
104
102
// we already checked above that the quality is within range
105
103
Ok ( item) => Ok ( QualityItem :: new ( item, from_f32 ( quality) ) ) ,
106
- Err ( _) => return Err ( ( ) ) ,
104
+ Err ( _) => return Err ( :: Error :: Header ) ,
107
105
}
108
106
}
109
107
}
@@ -155,40 +153,40 @@ mod tests {
155
153
156
154
#[ test]
157
155
fn test_quality_item_from_str1 ( ) {
158
- let x: Result < QualityItem < Encoding > , ( ) > = "chunked" . parse ( ) ;
156
+ let x: :: Result < QualityItem < Encoding > > = "chunked" . parse ( ) ;
159
157
assert_eq ! ( x. unwrap( ) , QualityItem { item: Chunked , quality: Quality ( 1000 ) , } ) ;
160
158
}
161
159
#[ test]
162
160
fn test_quality_item_from_str2 ( ) {
163
- let x: Result < QualityItem < Encoding > , ( ) > = "chunked; q=1" . parse ( ) ;
161
+ let x: :: Result < QualityItem < Encoding > > = "chunked; q=1" . parse ( ) ;
164
162
assert_eq ! ( x. unwrap( ) , QualityItem { item: Chunked , quality: Quality ( 1000 ) , } ) ;
165
163
}
166
164
#[ test]
167
165
fn test_quality_item_from_str3 ( ) {
168
- let x: Result < QualityItem < Encoding > , ( ) > = "gzip; q=0.5" . parse ( ) ;
166
+ let x: :: Result < QualityItem < Encoding > > = "gzip; q=0.5" . parse ( ) ;
169
167
assert_eq ! ( x. unwrap( ) , QualityItem { item: Gzip , quality: Quality ( 500 ) , } ) ;
170
168
}
171
169
#[ test]
172
170
fn test_quality_item_from_str4 ( ) {
173
- let x: Result < QualityItem < Encoding > , ( ) > = "gzip; q=0.273" . parse ( ) ;
171
+ let x: :: Result < QualityItem < Encoding > > = "gzip; q=0.273" . parse ( ) ;
174
172
assert_eq ! ( x. unwrap( ) , QualityItem { item: Gzip , quality: Quality ( 273 ) , } ) ;
175
173
}
176
174
#[ test]
177
175
fn test_quality_item_from_str5 ( ) {
178
- let x: Result < QualityItem < Encoding > , ( ) > = "gzip; q=0.2739999" . parse ( ) ;
179
- assert_eq ! ( x, Err ( ( ) ) ) ;
176
+ let x: :: Result < QualityItem < Encoding > > = "gzip; q=0.2739999" . parse ( ) ;
177
+ assert ! ( x. is_err ( ) ) ;
180
178
}
181
179
#[ test]
182
180
fn test_quality_item_from_str6 ( ) {
183
- let x: Result < QualityItem < Encoding > , ( ) > = "gzip; q=2" . parse ( ) ;
184
- assert_eq ! ( x, Err ( ( ) ) ) ;
181
+ let x: :: Result < QualityItem < Encoding > > = "gzip; q=2" . parse ( ) ;
182
+ assert ! ( x. is_err ( ) ) ;
185
183
}
186
184
#[ test]
187
185
fn test_quality_item_ordering ( ) {
188
186
let x: QualityItem < Encoding > = "gzip; q=0.5" . parse ( ) . ok ( ) . unwrap ( ) ;
189
187
let y: QualityItem < Encoding > = "gzip; q=0.273" . parse ( ) . ok ( ) . unwrap ( ) ;
190
188
let comparision_result: bool = x. gt ( & y) ;
191
- assert_eq ! ( comparision_result, true )
189
+ assert ! ( comparision_result)
192
190
}
193
191
194
192
#[ test]
0 commit comments