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 | ||||
| //! the `HttpVersion` enum. | ||||
| use std::fmt; | ||||
| use std::str::FromStr; | ||||
|  | ||||
| use error::Error; | ||||
| use self::HttpVersion::{Http09, Http10, Http11, H2, H2c}; | ||||
|  | ||||
| /// 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 { | ||||
|     fn default() -> HttpVersion { | ||||
|         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