Merge pull request #1136 from hannesg/reduce_to_owned_in_origin
refactor(headers): use static "http"/"https" for scheme
This commit is contained in:
		| @@ -84,6 +84,9 @@ impl Header for Origin { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static HTTP : &'static str = "http"; | ||||||
|  | static HTTPS : &'static str = "https"; | ||||||
|  |  | ||||||
| impl FromStr for Origin { | impl FromStr for Origin { | ||||||
|     type Err = ::Error; |     type Err = ::Error; | ||||||
|  |  | ||||||
| @@ -95,10 +98,14 @@ impl FromStr for Origin { | |||||||
|         // idx + 3 because that's how long "://" is |         // idx + 3 because that's how long "://" is | ||||||
|         let (scheme, etc) = (&s[..idx], &s[idx + 3..]); |         let (scheme, etc) = (&s[..idx], &s[idx + 3..]); | ||||||
|         let host = try!(Host::from_str(etc)); |         let host = try!(Host::from_str(etc)); | ||||||
|  |         let scheme = match scheme { | ||||||
|  |             "http"  => Cow::Borrowed(HTTP), | ||||||
|  |             "https" => Cow::Borrowed(HTTPS), | ||||||
|  |             s       => Cow::Owned(s.to_owned()) | ||||||
|  |         }; | ||||||
|  |  | ||||||
|         Ok(Origin{ |         Ok(Origin{ | ||||||
|             scheme: scheme.to_owned().into(), |             scheme: scheme, | ||||||
|             host: host |             host: host | ||||||
|         }) |         }) | ||||||
|     } |     } | ||||||
| @@ -121,14 +128,26 @@ impl PartialEq for Origin { | |||||||
| mod tests { | mod tests { | ||||||
|     use super::Origin; |     use super::Origin; | ||||||
|     use header::Header; |     use header::Header; | ||||||
|  |     use std::borrow::Cow; | ||||||
|  |  | ||||||
|  |     macro_rules! assert_borrowed{ | ||||||
|  |         ($expr : expr) => { | ||||||
|  |             match $expr { | ||||||
|  |                 Cow::Owned(ref v) => panic!("assertion failed: `{}` owns {:?}", stringify!($expr), v), | ||||||
|  |                 _ => {} | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     #[test] |     #[test] | ||||||
|     fn test_origin() { |     fn test_origin() { | ||||||
|         let origin = Header::parse_header(&vec![b"http://foo.com".to_vec()].into()); |         let origin : Origin = Header::parse_header(&vec![b"http://foo.com".to_vec()].into()).unwrap(); | ||||||
|         assert_eq!(origin.ok(), Some(Origin::new("http", "foo.com", None))); |         assert_eq!(&origin, &Origin::new("http", "foo.com", None)); | ||||||
|  |         assert_borrowed!(origin.scheme); | ||||||
|  |  | ||||||
|         let origin = Header::parse_header(&vec![b"https://foo.com:443".to_vec()].into()); |         let origin : Origin = Header::parse_header(&vec![b"https://foo.com:443".to_vec()].into()).unwrap(); | ||||||
|         assert_eq!(origin.ok(), Some(Origin::new("https", "foo.com", Some(443)))); |         assert_eq!(&origin, &Origin::new("https", "foo.com", Some(443))); | ||||||
|  |         assert_borrowed!(origin.scheme); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user