diff --git a/src/error.rs b/src/error.rs index 2f8a73becc..100e870b0d 100644 --- a/src/error.rs +++ b/src/error.rs @@ -3,6 +3,7 @@ use std::error::Error as StdError; use std::fmt; use std::io::Error as IoError; use std::str::Utf8Error; +use std::string::FromUtf8Error; use httparse; use url; @@ -127,6 +128,12 @@ impl From for Error { } } +impl From for Error { + fn from(err: FromUtf8Error) -> Error { + Utf8(err.utf8_error()) + } +} + impl From for Error { fn from(err: httparse::Error) -> Error { match err { diff --git a/src/header/common/access_control_allow_origin.rs b/src/header/common/access_control_allow_origin.rs index 2441aeb5f5..306966e867 100644 --- a/src/header/common/access_control_allow_origin.rs +++ b/src/header/common/access_control_allow_origin.rs @@ -1,7 +1,5 @@ use std::fmt::{self, Display}; -use std::str; -use url::Url; use header::{Header, HeaderFormat}; /// The `Access-Control-Allow-Origin` response header, @@ -20,7 +18,7 @@ use header::{Header, HeaderFormat}; /// * `null` /// * `*` /// * `http://google.com/` -/// +/// /// # Examples /// ``` /// use hyper::header::{Headers, AccessControlAllowOrigin}; @@ -40,11 +38,10 @@ use header::{Header, HeaderFormat}; /// ``` /// ``` /// use hyper::header::{Headers, AccessControlAllowOrigin}; -/// use hyper::Url; /// /// let mut headers = Headers::new(); /// headers.set( -/// AccessControlAllowOrigin::Value(Url::parse("http://hyper.rs").unwrap()) +/// AccessControlAllowOrigin::Value("http://hyper.rs".to_owned()) /// ); /// ``` #[derive(Clone, PartialEq, Debug)] @@ -54,7 +51,7 @@ pub enum AccessControlAllowOrigin { /// A hidden origin Null, /// Allow one particular origin - Value(Url), + Value(String), } impl Header for AccessControlAllowOrigin { @@ -63,13 +60,15 @@ impl Header for AccessControlAllowOrigin { } fn parse_header(raw: &[Vec]) -> ::Result { - if raw.len() == 1 { - match unsafe { &raw.get_unchecked(0)[..] } { - b"*" => Ok(AccessControlAllowOrigin::Any), - b"null" => Ok(AccessControlAllowOrigin::Null), - r => Ok(AccessControlAllowOrigin::Value(try!(Url::parse(try!(str::from_utf8(r)))))) - } - } else { Err(::Error::Header) } + if raw.len() != 1 { + return Err(::Error::Header) + } + let value = unsafe { raw.get_unchecked(0) }; + Ok(match &value[..] { + b"*" => AccessControlAllowOrigin::Any, + b"null" => AccessControlAllowOrigin::Null, + _ => AccessControlAllowOrigin::Value(try!(String::from_utf8(value.clone()))) + }) } }