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-
61use std:: cmp;
72use std:: default:: Default ;
83use std:: fmt;
@@ -19,6 +14,9 @@ use std::str;
1914/// floating point data type (`f32`) consumes four bytes, hyper uses an `u16` value to store the
2015/// quality internally. For performance reasons you may set quality directly to a value between
2116/// 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.
2220#[ derive( Copy , Clone , Debug , Eq , Ord , PartialEq , PartialOrd ) ]
2321pub struct Quality ( pub u16 ) ;
2422
@@ -73,8 +71,8 @@ impl<T: fmt::Display> fmt::Display for QualityItem<T> {
7371}
7472
7573impl < 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 > > {
7876 // Set defaults used if parsing fails.
7977 let mut raw_item = s;
8078 let mut quality = 1f32 ;
@@ -85,25 +83,25 @@ impl<T: str::FromStr> str::FromStr for QualityItem<T> {
8583 if start == "q=" || start == "Q=" {
8684 let q_part = & parts[ 0 ] [ 2 ..parts[ 0 ] . len ( ) ] ;
8785 if q_part. len ( ) > 5 {
88- return Err ( ( ) ) ;
86+ return Err ( :: Error :: Header ) ;
8987 }
9088 match q_part. parse :: < f32 > ( ) {
9189 Ok ( q_value) => {
9290 if 0f32 <= q_value && q_value <= 1f32 {
9391 quality = q_value;
9492 raw_item = parts[ 1 ] ;
9593 } else {
96- return Err ( ( ) ) ;
94+ return Err ( :: Error :: Header ) ;
9795 }
9896 } ,
99- Err ( _) => return Err ( ( ) ) ,
97+ Err ( _) => return Err ( :: Error :: Header ) ,
10098 }
10199 }
102100 }
103101 match raw_item. parse :: < T > ( ) {
104102 // we already checked above that the quality is within range
105103 Ok ( item) => Ok ( QualityItem :: new ( item, from_f32 ( quality) ) ) ,
106- Err ( _) => return Err ( ( ) ) ,
104+ Err ( _) => return Err ( :: Error :: Header ) ,
107105 }
108106 }
109107}
@@ -155,40 +153,40 @@ mod tests {
155153
156154 #[ test]
157155 fn test_quality_item_from_str1 ( ) {
158- let x: Result < QualityItem < Encoding > , ( ) > = "chunked" . parse ( ) ;
156+ let x: :: Result < QualityItem < Encoding > > = "chunked" . parse ( ) ;
159157 assert_eq ! ( x. unwrap( ) , QualityItem { item: Chunked , quality: Quality ( 1000 ) , } ) ;
160158 }
161159 #[ test]
162160 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 ( ) ;
164162 assert_eq ! ( x. unwrap( ) , QualityItem { item: Chunked , quality: Quality ( 1000 ) , } ) ;
165163 }
166164 #[ test]
167165 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 ( ) ;
169167 assert_eq ! ( x. unwrap( ) , QualityItem { item: Gzip , quality: Quality ( 500 ) , } ) ;
170168 }
171169 #[ test]
172170 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 ( ) ;
174172 assert_eq ! ( x. unwrap( ) , QualityItem { item: Gzip , quality: Quality ( 273 ) , } ) ;
175173 }
176174 #[ test]
177175 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 ( ) ) ;
180178 }
181179 #[ test]
182180 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 ( ) ) ;
185183 }
186184 #[ test]
187185 fn test_quality_item_ordering ( ) {
188186 let x: QualityItem < Encoding > = "gzip; q=0.5" . parse ( ) . ok ( ) . unwrap ( ) ;
189187 let y: QualityItem < Encoding > = "gzip; q=0.273" . parse ( ) . ok ( ) . unwrap ( ) ;
190188 let comparision_result: bool = x. gt ( & y) ;
191- assert_eq ! ( comparision_result, true )
189+ assert ! ( comparision_result)
192190 }
193191
194192 #[ test]
0 commit comments