feat(version): impl FromStr for HttpVersion
				
					
				
			This commit is contained in:
		
				
					committed by
					
						 Sean McArthur
						Sean McArthur
					
				
			
			
				
	
			
			
			
						parent
						
							8dc06f211e
						
					
				
				
					commit
					47f3aa6247
				
			| @@ -3,7 +3,9 @@ | |||||||
| //! Instead of relying on typo-prone Strings, use expected HTTP versions as | //! Instead of relying on typo-prone Strings, use expected HTTP versions as | ||||||
| //! the `HttpVersion` enum. | //! the `HttpVersion` enum. | ||||||
| use std::fmt; | use std::fmt; | ||||||
|  | use std::str::FromStr; | ||||||
|  |  | ||||||
|  | use error::Error; | ||||||
| use self::HttpVersion::{Http09, Http10, Http11, H2, H2c}; | use self::HttpVersion::{Http09, Http10, Http11, H2, H2c}; | ||||||
|  |  | ||||||
| /// Represents a version of the HTTP spec. | /// Represents a version of the HTTP spec. | ||||||
| @@ -36,8 +38,54 @@ impl fmt::Display for HttpVersion { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | impl FromStr for HttpVersion { | ||||||
|  |     type Err = Error; | ||||||
|  |     fn from_str(s: &str) -> Result<HttpVersion, Error> { | ||||||
|  |         Ok(match s { | ||||||
|  |             "HTTP/0.9" => Http09, | ||||||
|  |             "HTTP/1.0" => Http10, | ||||||
|  |             "HTTP/1.1" => Http11, | ||||||
|  |             "h2" => H2, | ||||||
|  |             "h2c" => H2c, | ||||||
|  |             _ => return Err(Error::Version), | ||||||
|  |         }) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| impl Default for HttpVersion { | impl Default for HttpVersion { | ||||||
|     fn default() -> HttpVersion { |     fn default() -> HttpVersion { | ||||||
|         Http11 |         Http11 | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[cfg(test)] | ||||||
|  | mod tests { | ||||||
|  |     use std::str::FromStr; | ||||||
|  |     use error::Error; | ||||||
|  |     use super::HttpVersion; | ||||||
|  |     use super::HttpVersion::{Http09,Http10,Http11,H2,H2c}; | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_default() { | ||||||
|  |         assert_eq!(Http11, HttpVersion::default()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_from_str() { | ||||||
|  |         assert_eq!(Http09, HttpVersion::from_str("HTTP/0.9").unwrap()); | ||||||
|  |         assert_eq!(Http10, HttpVersion::from_str("HTTP/1.0").unwrap()); | ||||||
|  |         assert_eq!(Http11, HttpVersion::from_str("HTTP/1.1").unwrap()); | ||||||
|  |         assert_eq!(H2, HttpVersion::from_str("h2").unwrap()); | ||||||
|  |         assert_eq!(H2c, HttpVersion::from_str("h2c").unwrap()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     fn test_from_str_panic() { | ||||||
|  |         match HttpVersion::from_str("foo") { | ||||||
|  |             Err(Error::Version) => assert!(true), | ||||||
|  |             Err(_) => assert!(false), | ||||||
|  |             Ok(_) => assert!(false), | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |          | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user