Merge pull request #595 from pyfisch/originstring

refactor(headers): use String in Access-Control-Allow-Origin header
This commit is contained in:
Sean McArthur
2015-07-06 11:00:49 -07:00
2 changed files with 18 additions and 12 deletions

View File

@@ -3,6 +3,7 @@ use std::error::Error as StdError;
use std::fmt; use std::fmt;
use std::io::Error as IoError; use std::io::Error as IoError;
use std::str::Utf8Error; use std::str::Utf8Error;
use std::string::FromUtf8Error;
use httparse; use httparse;
use url; use url;
@@ -127,6 +128,12 @@ impl From<Utf8Error> for Error {
} }
} }
impl From<FromUtf8Error> for Error {
fn from(err: FromUtf8Error) -> Error {
Utf8(err.utf8_error())
}
}
impl From<httparse::Error> for Error { impl From<httparse::Error> for Error {
fn from(err: httparse::Error) -> Error { fn from(err: httparse::Error) -> Error {
match err { match err {

View File

@@ -1,7 +1,5 @@
use std::fmt::{self, Display}; use std::fmt::{self, Display};
use std::str;
use url::Url;
use header::{Header, HeaderFormat}; use header::{Header, HeaderFormat};
/// The `Access-Control-Allow-Origin` response header, /// The `Access-Control-Allow-Origin` response header,
@@ -40,11 +38,10 @@ use header::{Header, HeaderFormat};
/// ``` /// ```
/// ``` /// ```
/// use hyper::header::{Headers, AccessControlAllowOrigin}; /// use hyper::header::{Headers, AccessControlAllowOrigin};
/// use hyper::Url;
/// ///
/// let mut headers = Headers::new(); /// let mut headers = Headers::new();
/// headers.set( /// headers.set(
/// AccessControlAllowOrigin::Value(Url::parse("http://hyper.rs").unwrap()) /// AccessControlAllowOrigin::Value("http://hyper.rs".to_owned())
/// ); /// );
/// ``` /// ```
#[derive(Clone, PartialEq, Debug)] #[derive(Clone, PartialEq, Debug)]
@@ -54,7 +51,7 @@ pub enum AccessControlAllowOrigin {
/// A hidden origin /// A hidden origin
Null, Null,
/// Allow one particular origin /// Allow one particular origin
Value(Url), Value(String),
} }
impl Header for AccessControlAllowOrigin { impl Header for AccessControlAllowOrigin {
@@ -63,13 +60,15 @@ impl Header for AccessControlAllowOrigin {
} }
fn parse_header(raw: &[Vec<u8>]) -> ::Result<AccessControlAllowOrigin> { fn parse_header(raw: &[Vec<u8>]) -> ::Result<AccessControlAllowOrigin> {
if raw.len() == 1 { if raw.len() != 1 {
match unsafe { &raw.get_unchecked(0)[..] } { return Err(::Error::Header)
b"*" => Ok(AccessControlAllowOrigin::Any), }
b"null" => Ok(AccessControlAllowOrigin::Null), let value = unsafe { raw.get_unchecked(0) };
r => Ok(AccessControlAllowOrigin::Value(try!(Url::parse(try!(str::from_utf8(r)))))) Ok(match &value[..] {
} b"*" => AccessControlAllowOrigin::Any,
} else { Err(::Error::Header) } b"null" => AccessControlAllowOrigin::Null,
_ => AccessControlAllowOrigin::Value(try!(String::from_utf8(value.clone())))
})
} }
} }