From 568707c491aaba55b22f991a8bb84535596b57ea Mon Sep 17 00:00:00 2001 From: Pyfisch Date: Sun, 4 Jan 2015 11:50:50 +0100 Subject: [PATCH 1/4] Added AccessControl* family of headers. Fixes #169 --- .../common/access_control/allow_headers.rs | 25 +++++++++++++ .../common/access_control/allow_methods.rs | 25 +++++++++++++ .../common/access_control/allow_origin.rs | 37 +++++++++++++++++++ src/header/common/access_control/max_age.rs | 23 ++++++++++++ src/header/common/access_control/mod.rs | 5 +++ .../common/access_control/request_headers.rs | 25 +++++++++++++ .../common/access_control/request_method.rs | 26 +++++++++++++ src/header/common/mod.rs | 3 ++ 8 files changed, 169 insertions(+) create mode 100644 src/header/common/access_control/allow_headers.rs create mode 100644 src/header/common/access_control/allow_methods.rs create mode 100644 src/header/common/access_control/allow_origin.rs create mode 100644 src/header/common/access_control/max_age.rs create mode 100644 src/header/common/access_control/mod.rs create mode 100644 src/header/common/access_control/request_headers.rs create mode 100644 src/header/common/access_control/request_method.rs diff --git a/src/header/common/access_control/allow_headers.rs b/src/header/common/access_control/allow_headers.rs new file mode 100644 index 00000000..dc77aea8 --- /dev/null +++ b/src/header/common/access_control/allow_headers.rs @@ -0,0 +1,25 @@ +use std::fmt::{mod}; + +use header; +use header::shared; + +#[deriving(Clone)] +struct AccessControlAllowHeaders(pub Vec); + +impl header::Header for AccessControlAllowHeaders { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Allow-Headers" + } + + fn parse_header(raw: &[Vec]) -> Option { + shared::from_comma_delimited(raw).map(AccessControlAllowHeaders) + } +} + +impl header::HeaderFormat for AccessControlAllowHeaders { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + let AccessControlAllowHeaders(ref parts) = *self; + shared::fmt_comma_delimited(f, parts.as_slice()) + } +} diff --git a/src/header/common/access_control/allow_methods.rs b/src/header/common/access_control/allow_methods.rs new file mode 100644 index 00000000..1942d765 --- /dev/null +++ b/src/header/common/access_control/allow_methods.rs @@ -0,0 +1,25 @@ +use std::fmt::{mod}; + +use header; +use header::shared; + +#[deriving(Clone)] +struct AccessControlAllowMethods(pub Vec); + +impl header::Header for AccessControlAllowMethods { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Allow-Methods" + } + + fn parse_header(raw: &[Vec]) -> Option { + shared::from_comma_delimited(raw).map(AccessControlAllowMethods) + } +} + +impl header::HeaderFormat for AccessControlAllowMethods { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + let AccessControlAllowMethods(ref parts) = *self; + shared::fmt_comma_delimited(f, parts.as_slice()) + } +} diff --git a/src/header/common/access_control/allow_origin.rs b/src/header/common/access_control/allow_origin.rs new file mode 100644 index 00000000..fe86668d --- /dev/null +++ b/src/header/common/access_control/allow_origin.rs @@ -0,0 +1,37 @@ +use header::shared; + +#[deriving(Clone)] +enum AccessControlAllowOrigin { + AllowStar, + AllowOrigin(Url), +} + +impl header::Header for AccessControlAllowOrigin { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Allow-Origin" + } + + fn parse_header(raw: &[Vec]) -> Option { + if raw.len() == 1 { + from_utf8(raw[0].as_slice()).and_then(|s| { + if s == "*" { + Some(AllowStar) + } else { + Url::parse(s).ok().map(|url| AllowOrigin(url)) + } + }) + } else { + None + } + } +} + +impl header::HeaderFormat for AccessControlAllowOrigin { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + match *self { + AllowStar => "*".fmt(f), + AllowOrigin(ref url) => url.fmt(f) + } + } +} diff --git a/src/header/common/access_control/max_age.rs b/src/header/common/access_control/max_age.rs new file mode 100644 index 00000000..e5142af9 --- /dev/null +++ b/src/header/common/access_control/max_age.rs @@ -0,0 +1,23 @@ +use header; +use header::shared; + +#[deriving(Clone)] +struct AccessControlMaxAge(pub u32); + +impl header::Header for AccessControlMaxAge { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Max-Age" + } + + fn parse_header(raw: &[Vec]) -> Option { + shared::from_one_raw_str(raw).map(AccessControlMaxAge) + } +} + +impl header::HeaderFormat for AccessControlMaxAge { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + let AccessControlMaxAge(ref num) = *self; + num.fmt(f) + } +} diff --git a/src/header/common/access_control/mod.rs b/src/header/common/access_control/mod.rs new file mode 100644 index 00000000..96e27452 --- /dev/null +++ b/src/header/common/access_control/mod.rs @@ -0,0 +1,5 @@ +pub mod allow_headers; +pub mod allow_methods; +pub mod allow_origin; +pub mod request_headers; +pub mod request_method; diff --git a/src/header/common/access_control/request_headers.rs b/src/header/common/access_control/request_headers.rs new file mode 100644 index 00000000..3bfb9df7 --- /dev/null +++ b/src/header/common/access_control/request_headers.rs @@ -0,0 +1,25 @@ +use std::fmt::{mod}; + +use header; +use header::shared; + +#[deriving(Clone)] +struct AccessControlRequestHeaders(pub Vec); + +impl header::Header for AccessControlRequestHeaders { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Request-Headers" + } + + fn parse_header(raw: &[Vec]) -> Option { + shared::from_comma_delimited(raw).map(AccessControlRequestHeaders) + } +} + +impl header::HeaderFormat for AccessControlRequestHeaders { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + let AccessControlRequestHeaders(ref parts) = *self; + shared::fmt_comma_delimited(f, parts.as_slice()) + } +} diff --git a/src/header/common/access_control/request_method.rs b/src/header/common/access_control/request_method.rs new file mode 100644 index 00000000..4ef09fde --- /dev/null +++ b/src/header/common/access_control/request_method.rs @@ -0,0 +1,26 @@ +use std::fmt::{mod}; + +use header; +use header::shared; +use method::Method; + +#[deriving(Clone)] +struct AccessControlRequestMethod(pub Method); + +impl header::Header for AccessControlRequestMethod { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Request-Method" + } + + fn parse_header(raw: &[Vec]) -> Option { + shared::from_one_raw_str(raw).map(AccessControlRequestMethod) + } +} + +impl header::HeaderFormat for AccessControlRequestMethod { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + let AccessControlRequestMethod(ref method) = *self; + method.fmt(f) + } +} diff --git a/src/header/common/mod.rs b/src/header/common/mod.rs index f6659afa..29703105 100644 --- a/src/header/common/mod.rs +++ b/src/header/common/mod.rs @@ -74,6 +74,9 @@ macro_rules! deref( } ); +// Exposes the AccessControl* family of headers. +pub mod access_control; + /// Exposes the Accept header. pub mod accept; From d5160dc8a427e54cd0e87dc3ce616a124c364f89 Mon Sep 17 00:00:00 2001 From: Pyfisch Date: Sun, 4 Jan 2015 12:00:15 +0100 Subject: [PATCH 2/4] Revert "Added AccessControl* family of headers." This reverts commit 568707c491aaba55b22f991a8bb84535596b57ea. --- .../common/access_control/allow_headers.rs | 25 ------------- .../common/access_control/allow_methods.rs | 25 ------------- .../common/access_control/allow_origin.rs | 37 ------------------- src/header/common/access_control/max_age.rs | 23 ------------ src/header/common/access_control/mod.rs | 5 --- .../common/access_control/request_headers.rs | 25 ------------- .../common/access_control/request_method.rs | 26 ------------- src/header/common/mod.rs | 3 -- 8 files changed, 169 deletions(-) delete mode 100644 src/header/common/access_control/allow_headers.rs delete mode 100644 src/header/common/access_control/allow_methods.rs delete mode 100644 src/header/common/access_control/allow_origin.rs delete mode 100644 src/header/common/access_control/max_age.rs delete mode 100644 src/header/common/access_control/mod.rs delete mode 100644 src/header/common/access_control/request_headers.rs delete mode 100644 src/header/common/access_control/request_method.rs diff --git a/src/header/common/access_control/allow_headers.rs b/src/header/common/access_control/allow_headers.rs deleted file mode 100644 index dc77aea8..00000000 --- a/src/header/common/access_control/allow_headers.rs +++ /dev/null @@ -1,25 +0,0 @@ -use std::fmt::{mod}; - -use header; -use header::shared; - -#[deriving(Clone)] -struct AccessControlAllowHeaders(pub Vec); - -impl header::Header for AccessControlAllowHeaders { - #[inline] - fn header_name(_: Option) -> &'static str { - "Access-Control-Allow-Headers" - } - - fn parse_header(raw: &[Vec]) -> Option { - shared::from_comma_delimited(raw).map(AccessControlAllowHeaders) - } -} - -impl header::HeaderFormat for AccessControlAllowHeaders { - fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { - let AccessControlAllowHeaders(ref parts) = *self; - shared::fmt_comma_delimited(f, parts.as_slice()) - } -} diff --git a/src/header/common/access_control/allow_methods.rs b/src/header/common/access_control/allow_methods.rs deleted file mode 100644 index 1942d765..00000000 --- a/src/header/common/access_control/allow_methods.rs +++ /dev/null @@ -1,25 +0,0 @@ -use std::fmt::{mod}; - -use header; -use header::shared; - -#[deriving(Clone)] -struct AccessControlAllowMethods(pub Vec); - -impl header::Header for AccessControlAllowMethods { - #[inline] - fn header_name(_: Option) -> &'static str { - "Access-Control-Allow-Methods" - } - - fn parse_header(raw: &[Vec]) -> Option { - shared::from_comma_delimited(raw).map(AccessControlAllowMethods) - } -} - -impl header::HeaderFormat for AccessControlAllowMethods { - fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { - let AccessControlAllowMethods(ref parts) = *self; - shared::fmt_comma_delimited(f, parts.as_slice()) - } -} diff --git a/src/header/common/access_control/allow_origin.rs b/src/header/common/access_control/allow_origin.rs deleted file mode 100644 index fe86668d..00000000 --- a/src/header/common/access_control/allow_origin.rs +++ /dev/null @@ -1,37 +0,0 @@ -use header::shared; - -#[deriving(Clone)] -enum AccessControlAllowOrigin { - AllowStar, - AllowOrigin(Url), -} - -impl header::Header for AccessControlAllowOrigin { - #[inline] - fn header_name(_: Option) -> &'static str { - "Access-Control-Allow-Origin" - } - - fn parse_header(raw: &[Vec]) -> Option { - if raw.len() == 1 { - from_utf8(raw[0].as_slice()).and_then(|s| { - if s == "*" { - Some(AllowStar) - } else { - Url::parse(s).ok().map(|url| AllowOrigin(url)) - } - }) - } else { - None - } - } -} - -impl header::HeaderFormat for AccessControlAllowOrigin { - fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { - match *self { - AllowStar => "*".fmt(f), - AllowOrigin(ref url) => url.fmt(f) - } - } -} diff --git a/src/header/common/access_control/max_age.rs b/src/header/common/access_control/max_age.rs deleted file mode 100644 index e5142af9..00000000 --- a/src/header/common/access_control/max_age.rs +++ /dev/null @@ -1,23 +0,0 @@ -use header; -use header::shared; - -#[deriving(Clone)] -struct AccessControlMaxAge(pub u32); - -impl header::Header for AccessControlMaxAge { - #[inline] - fn header_name(_: Option) -> &'static str { - "Access-Control-Max-Age" - } - - fn parse_header(raw: &[Vec]) -> Option { - shared::from_one_raw_str(raw).map(AccessControlMaxAge) - } -} - -impl header::HeaderFormat for AccessControlMaxAge { - fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { - let AccessControlMaxAge(ref num) = *self; - num.fmt(f) - } -} diff --git a/src/header/common/access_control/mod.rs b/src/header/common/access_control/mod.rs deleted file mode 100644 index 96e27452..00000000 --- a/src/header/common/access_control/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub mod allow_headers; -pub mod allow_methods; -pub mod allow_origin; -pub mod request_headers; -pub mod request_method; diff --git a/src/header/common/access_control/request_headers.rs b/src/header/common/access_control/request_headers.rs deleted file mode 100644 index 3bfb9df7..00000000 --- a/src/header/common/access_control/request_headers.rs +++ /dev/null @@ -1,25 +0,0 @@ -use std::fmt::{mod}; - -use header; -use header::shared; - -#[deriving(Clone)] -struct AccessControlRequestHeaders(pub Vec); - -impl header::Header for AccessControlRequestHeaders { - #[inline] - fn header_name(_: Option) -> &'static str { - "Access-Control-Request-Headers" - } - - fn parse_header(raw: &[Vec]) -> Option { - shared::from_comma_delimited(raw).map(AccessControlRequestHeaders) - } -} - -impl header::HeaderFormat for AccessControlRequestHeaders { - fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { - let AccessControlRequestHeaders(ref parts) = *self; - shared::fmt_comma_delimited(f, parts.as_slice()) - } -} diff --git a/src/header/common/access_control/request_method.rs b/src/header/common/access_control/request_method.rs deleted file mode 100644 index 4ef09fde..00000000 --- a/src/header/common/access_control/request_method.rs +++ /dev/null @@ -1,26 +0,0 @@ -use std::fmt::{mod}; - -use header; -use header::shared; -use method::Method; - -#[deriving(Clone)] -struct AccessControlRequestMethod(pub Method); - -impl header::Header for AccessControlRequestMethod { - #[inline] - fn header_name(_: Option) -> &'static str { - "Access-Control-Request-Method" - } - - fn parse_header(raw: &[Vec]) -> Option { - shared::from_one_raw_str(raw).map(AccessControlRequestMethod) - } -} - -impl header::HeaderFormat for AccessControlRequestMethod { - fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { - let AccessControlRequestMethod(ref method) = *self; - method.fmt(f) - } -} diff --git a/src/header/common/mod.rs b/src/header/common/mod.rs index 29703105..f6659afa 100644 --- a/src/header/common/mod.rs +++ b/src/header/common/mod.rs @@ -74,9 +74,6 @@ macro_rules! deref( } ); -// Exposes the AccessControl* family of headers. -pub mod access_control; - /// Exposes the Accept header. pub mod accept; From 60ada12b3c060ca526d907340f45fe226a4d972d Mon Sep 17 00:00:00 2001 From: Pyfisch Date: Sun, 4 Jan 2015 12:04:32 +0100 Subject: [PATCH 3/4] Added AccessControl* family of headers. Fixes #169 --- .../common/access_control/allow_headers.rs | 25 +++++++++++++ .../common/access_control/allow_methods.rs | 25 +++++++++++++ .../common/access_control/allow_origin.rs | 37 +++++++++++++++++++ src/header/common/access_control/max_age.rs | 23 ++++++++++++ src/header/common/access_control/mod.rs | 5 +++ .../common/access_control/request_headers.rs | 25 +++++++++++++ .../common/access_control/request_method.rs | 26 +++++++++++++ src/header/common/mod.rs | 3 ++ 8 files changed, 169 insertions(+) create mode 100644 src/header/common/access_control/allow_headers.rs create mode 100644 src/header/common/access_control/allow_methods.rs create mode 100644 src/header/common/access_control/allow_origin.rs create mode 100644 src/header/common/access_control/max_age.rs create mode 100644 src/header/common/access_control/mod.rs create mode 100644 src/header/common/access_control/request_headers.rs create mode 100644 src/header/common/access_control/request_method.rs diff --git a/src/header/common/access_control/allow_headers.rs b/src/header/common/access_control/allow_headers.rs new file mode 100644 index 00000000..dc77aea8 --- /dev/null +++ b/src/header/common/access_control/allow_headers.rs @@ -0,0 +1,25 @@ +use std::fmt::{mod}; + +use header; +use header::shared; + +#[deriving(Clone)] +struct AccessControlAllowHeaders(pub Vec); + +impl header::Header for AccessControlAllowHeaders { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Allow-Headers" + } + + fn parse_header(raw: &[Vec]) -> Option { + shared::from_comma_delimited(raw).map(AccessControlAllowHeaders) + } +} + +impl header::HeaderFormat for AccessControlAllowHeaders { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + let AccessControlAllowHeaders(ref parts) = *self; + shared::fmt_comma_delimited(f, parts.as_slice()) + } +} diff --git a/src/header/common/access_control/allow_methods.rs b/src/header/common/access_control/allow_methods.rs new file mode 100644 index 00000000..1942d765 --- /dev/null +++ b/src/header/common/access_control/allow_methods.rs @@ -0,0 +1,25 @@ +use std::fmt::{mod}; + +use header; +use header::shared; + +#[deriving(Clone)] +struct AccessControlAllowMethods(pub Vec); + +impl header::Header for AccessControlAllowMethods { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Allow-Methods" + } + + fn parse_header(raw: &[Vec]) -> Option { + shared::from_comma_delimited(raw).map(AccessControlAllowMethods) + } +} + +impl header::HeaderFormat for AccessControlAllowMethods { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + let AccessControlAllowMethods(ref parts) = *self; + shared::fmt_comma_delimited(f, parts.as_slice()) + } +} diff --git a/src/header/common/access_control/allow_origin.rs b/src/header/common/access_control/allow_origin.rs new file mode 100644 index 00000000..fe86668d --- /dev/null +++ b/src/header/common/access_control/allow_origin.rs @@ -0,0 +1,37 @@ +use header::shared; + +#[deriving(Clone)] +enum AccessControlAllowOrigin { + AllowStar, + AllowOrigin(Url), +} + +impl header::Header for AccessControlAllowOrigin { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Allow-Origin" + } + + fn parse_header(raw: &[Vec]) -> Option { + if raw.len() == 1 { + from_utf8(raw[0].as_slice()).and_then(|s| { + if s == "*" { + Some(AllowStar) + } else { + Url::parse(s).ok().map(|url| AllowOrigin(url)) + } + }) + } else { + None + } + } +} + +impl header::HeaderFormat for AccessControlAllowOrigin { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + match *self { + AllowStar => "*".fmt(f), + AllowOrigin(ref url) => url.fmt(f) + } + } +} diff --git a/src/header/common/access_control/max_age.rs b/src/header/common/access_control/max_age.rs new file mode 100644 index 00000000..e5142af9 --- /dev/null +++ b/src/header/common/access_control/max_age.rs @@ -0,0 +1,23 @@ +use header; +use header::shared; + +#[deriving(Clone)] +struct AccessControlMaxAge(pub u32); + +impl header::Header for AccessControlMaxAge { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Max-Age" + } + + fn parse_header(raw: &[Vec]) -> Option { + shared::from_one_raw_str(raw).map(AccessControlMaxAge) + } +} + +impl header::HeaderFormat for AccessControlMaxAge { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + let AccessControlMaxAge(ref num) = *self; + num.fmt(f) + } +} diff --git a/src/header/common/access_control/mod.rs b/src/header/common/access_control/mod.rs new file mode 100644 index 00000000..96e27452 --- /dev/null +++ b/src/header/common/access_control/mod.rs @@ -0,0 +1,5 @@ +pub mod allow_headers; +pub mod allow_methods; +pub mod allow_origin; +pub mod request_headers; +pub mod request_method; diff --git a/src/header/common/access_control/request_headers.rs b/src/header/common/access_control/request_headers.rs new file mode 100644 index 00000000..3bfb9df7 --- /dev/null +++ b/src/header/common/access_control/request_headers.rs @@ -0,0 +1,25 @@ +use std::fmt::{mod}; + +use header; +use header::shared; + +#[deriving(Clone)] +struct AccessControlRequestHeaders(pub Vec); + +impl header::Header for AccessControlRequestHeaders { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Request-Headers" + } + + fn parse_header(raw: &[Vec]) -> Option { + shared::from_comma_delimited(raw).map(AccessControlRequestHeaders) + } +} + +impl header::HeaderFormat for AccessControlRequestHeaders { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + let AccessControlRequestHeaders(ref parts) = *self; + shared::fmt_comma_delimited(f, parts.as_slice()) + } +} diff --git a/src/header/common/access_control/request_method.rs b/src/header/common/access_control/request_method.rs new file mode 100644 index 00000000..4ef09fde --- /dev/null +++ b/src/header/common/access_control/request_method.rs @@ -0,0 +1,26 @@ +use std::fmt::{mod}; + +use header; +use header::shared; +use method::Method; + +#[deriving(Clone)] +struct AccessControlRequestMethod(pub Method); + +impl header::Header for AccessControlRequestMethod { + #[inline] + fn header_name(_: Option) -> &'static str { + "Access-Control-Request-Method" + } + + fn parse_header(raw: &[Vec]) -> Option { + shared::from_one_raw_str(raw).map(AccessControlRequestMethod) + } +} + +impl header::HeaderFormat for AccessControlRequestMethod { + fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { + let AccessControlRequestMethod(ref method) = *self; + method.fmt(f) + } +} diff --git a/src/header/common/mod.rs b/src/header/common/mod.rs index f6659afa..29703105 100644 --- a/src/header/common/mod.rs +++ b/src/header/common/mod.rs @@ -74,6 +74,9 @@ macro_rules! deref( } ); +// Exposes the AccessControl* family of headers. +pub mod access_control; + /// Exposes the Accept header. pub mod accept; From c228a5506a49052cad04ac0cf8f45e29d05294fe Mon Sep 17 00:00:00 2001 From: Pyfisch Date: Tue, 6 Jan 2015 22:04:35 +0100 Subject: [PATCH 4/4] Worked on Access-Control-* header family. --- .../common/access_control/allow_headers.rs | 4 +-- .../common/access_control/allow_methods.rs | 7 ++-- .../common/access_control/allow_origin.rs | 36 ++++++++++++------- src/header/common/access_control/max_age.rs | 6 ++-- src/header/common/access_control/mod.rs | 12 +++++++ .../common/access_control/request_headers.rs | 4 +-- .../common/access_control/request_method.rs | 6 ++-- src/header/common/mod.rs | 2 +- 8 files changed, 51 insertions(+), 26 deletions(-) diff --git a/src/header/common/access_control/allow_headers.rs b/src/header/common/access_control/allow_headers.rs index dc77aea8..26a741b0 100644 --- a/src/header/common/access_control/allow_headers.rs +++ b/src/header/common/access_control/allow_headers.rs @@ -1,9 +1,9 @@ -use std::fmt::{mod}; +use std::fmt::{self}; use header; use header::shared; -#[deriving(Clone)] +#[derive(Clone)] struct AccessControlAllowHeaders(pub Vec); impl header::Header for AccessControlAllowHeaders { diff --git a/src/header/common/access_control/allow_methods.rs b/src/header/common/access_control/allow_methods.rs index 1942d765..cdd71896 100644 --- a/src/header/common/access_control/allow_methods.rs +++ b/src/header/common/access_control/allow_methods.rs @@ -1,10 +1,11 @@ -use std::fmt::{mod}; +use std::fmt::{self}; use header; use header::shared; +use method; -#[deriving(Clone)] -struct AccessControlAllowMethods(pub Vec); +#[derive(Clone)] +struct AccessControlAllowMethods(pub Vec); impl header::Header for AccessControlAllowMethods { #[inline] diff --git a/src/header/common/access_control/allow_origin.rs b/src/header/common/access_control/allow_origin.rs index fe86668d..dfb1d118 100644 --- a/src/header/common/access_control/allow_origin.rs +++ b/src/header/common/access_control/allow_origin.rs @@ -1,9 +1,14 @@ -use header::shared; +extern crate url; -#[deriving(Clone)] +use std::fmt::{self}; +use std::str; + +use header; + +#[derive(Clone)] enum AccessControlAllowOrigin { AllowStar, - AllowOrigin(Url), + AllowOrigin(url::Url), } impl header::Header for AccessControlAllowOrigin { @@ -14,15 +19,19 @@ impl header::Header for AccessControlAllowOrigin { fn parse_header(raw: &[Vec]) -> Option { if raw.len() == 1 { - from_utf8(raw[0].as_slice()).and_then(|s| { - if s == "*" { - Some(AllowStar) - } else { - Url::parse(s).ok().map(|url| AllowOrigin(url)) - } - }) + match str::from_utf8(unsafe { raw[].get_unchecked(0)[] }) { + Ok(s) => { + if s == "*" { + Some(AccessControlAllowOrigin::AllowStar) + } else { + url::Url::parse(s).ok().map( + |url| AccessControlAllowOrigin::AllowOrigin(url)) + } + }, + _ => return None, + } } else { - None + return None; } } } @@ -30,8 +39,9 @@ impl header::Header for AccessControlAllowOrigin { impl header::HeaderFormat for AccessControlAllowOrigin { fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { - AllowStar => "*".fmt(f), - AllowOrigin(ref url) => url.fmt(f) + AccessControlAllowOrigin::AllowStar => write!(f, "*"), + AccessControlAllowOrigin::AllowOrigin(ref url) => + write!(f, "{}", url) } } } diff --git a/src/header/common/access_control/max_age.rs b/src/header/common/access_control/max_age.rs index e5142af9..98b52b47 100644 --- a/src/header/common/access_control/max_age.rs +++ b/src/header/common/access_control/max_age.rs @@ -1,7 +1,9 @@ +use std::fmt; + use header; use header::shared; -#[deriving(Clone)] +#[derive(Clone)] struct AccessControlMaxAge(pub u32); impl header::Header for AccessControlMaxAge { @@ -18,6 +20,6 @@ impl header::Header for AccessControlMaxAge { impl header::HeaderFormat for AccessControlMaxAge { fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { let AccessControlMaxAge(ref num) = *self; - num.fmt(f) + write!(f, "{}", num) } } diff --git a/src/header/common/access_control/mod.rs b/src/header/common/access_control/mod.rs index 96e27452..d8e6e21f 100644 --- a/src/header/common/access_control/mod.rs +++ b/src/header/common/access_control/mod.rs @@ -1,5 +1,17 @@ +/// Exposes the AccessControlAllowHeaders header pub mod allow_headers; + +/// Exposes the AccessControlAllowMethods header pub mod allow_methods; + +/// Exposes the AccessControlAllowOrigin header pub mod allow_origin; + +/// Exposes the AccessControlMaxAge header +pub mod max_age; + +/// Exposes the AccessControlRequestHeaders header pub mod request_headers; + +/// Exposes the AccessControlRequestMethod header pub mod request_method; diff --git a/src/header/common/access_control/request_headers.rs b/src/header/common/access_control/request_headers.rs index 3bfb9df7..1aafea98 100644 --- a/src/header/common/access_control/request_headers.rs +++ b/src/header/common/access_control/request_headers.rs @@ -1,9 +1,9 @@ -use std::fmt::{mod}; +use std::fmt::{self}; use header; use header::shared; -#[deriving(Clone)] +#[derive(Clone)] struct AccessControlRequestHeaders(pub Vec); impl header::Header for AccessControlRequestHeaders { diff --git a/src/header/common/access_control/request_method.rs b/src/header/common/access_control/request_method.rs index 4ef09fde..4b5a7746 100644 --- a/src/header/common/access_control/request_method.rs +++ b/src/header/common/access_control/request_method.rs @@ -1,10 +1,10 @@ -use std::fmt::{mod}; +use std::fmt; use header; use header::shared; use method::Method; -#[deriving(Clone)] +#[derive(Clone)] struct AccessControlRequestMethod(pub Method); impl header::Header for AccessControlRequestMethod { @@ -21,6 +21,6 @@ impl header::Header for AccessControlRequestMethod { impl header::HeaderFormat for AccessControlRequestMethod { fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { let AccessControlRequestMethod(ref method) = *self; - method.fmt(f) + write!(f, "{}", method) } } diff --git a/src/header/common/mod.rs b/src/header/common/mod.rs index b77a88ab..dff6373e 100644 --- a/src/header/common/mod.rs +++ b/src/header/common/mod.rs @@ -76,7 +76,7 @@ macro_rules! deref( } ); -// Exposes the AccessControl* family of headers. +/// Exposes the AccessControl* family of headers. pub mod access_control; /// Exposes the Accept header.