Merge pull request #440 from pyfisch/refactorheaders5
refactor(headers): Use header!() for CORS headers.
This commit is contained in:
		| @@ -1,32 +0,0 @@ | |||||||
| use std::fmt::{self}; |  | ||||||
|  |  | ||||||
| use header; |  | ||||||
|  |  | ||||||
| /// The `Access-Control-Allow-Headers` response header, |  | ||||||
| /// part of [CORS](http://www.w3.org/TR/cors/). |  | ||||||
| /// |  | ||||||
| /// > The `Access-Control-Allow-Headers` header indicates, as part of the |  | ||||||
| /// > response to a preflight request, which header field names can be used |  | ||||||
| /// > during the actual request. |  | ||||||
| /// |  | ||||||
| /// Spec: www.w3.org/TR/cors/#access-control-allow-headers-response-header |  | ||||||
| #[derive(Clone, PartialEq, Debug)] |  | ||||||
| pub struct AccessControlAllowHeaders(pub Vec<String>); |  | ||||||
|  |  | ||||||
| impl header::Header for AccessControlAllowHeaders { |  | ||||||
|     #[inline] |  | ||||||
|     fn header_name() -> &'static str { |  | ||||||
|         "Access-Control-Allow-Headers" |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     fn parse_header(raw: &[Vec<u8>]) -> Option<AccessControlAllowHeaders> { |  | ||||||
|         header::parsing::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; |  | ||||||
|         header::parsing::fmt_comma_delimited(f, parts.as_ref()) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,33 +0,0 @@ | |||||||
| use std::fmt::{self}; |  | ||||||
|  |  | ||||||
| use header; |  | ||||||
| use method; |  | ||||||
|  |  | ||||||
| /// The `Access-Control-Allow-Methods` response header, |  | ||||||
| /// part of [CORS](http://www.w3.org/TR/cors/). |  | ||||||
| /// |  | ||||||
| /// > The `Access-Control-Allow-Methods` header indicates, as part of the |  | ||||||
| /// > response to a preflight request, which methods can be used during the |  | ||||||
| /// > actual request. |  | ||||||
| /// |  | ||||||
| /// Spec: www.w3.org/TR/cors/#access-control-allow-methods-response-header |  | ||||||
| #[derive(Clone, PartialEq, Debug)] |  | ||||||
| pub struct AccessControlAllowMethods(pub Vec<method::Method>); |  | ||||||
|  |  | ||||||
| impl header::Header for AccessControlAllowMethods { |  | ||||||
|     #[inline] |  | ||||||
|     fn header_name() -> &'static str { |  | ||||||
|         "Access-Control-Allow-Methods" |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     fn parse_header(raw: &[Vec<u8>]) -> Option<AccessControlAllowMethods> { |  | ||||||
|         header::parsing::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; |  | ||||||
|         header::parsing::fmt_comma_delimited(f, parts.as_ref()) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| use std::fmt; |  | ||||||
|  |  | ||||||
| use header; |  | ||||||
|  |  | ||||||
| /// The `Access-Control-Max-Age` response header, |  | ||||||
| /// part of [CORS](http://www.w3.org/TR/cors/). |  | ||||||
| /// |  | ||||||
| /// > The `Access-Control-Max-Age` header indicates how long the results of a |  | ||||||
| /// > preflight request can be cached in a preflight result cache. |  | ||||||
| /// |  | ||||||
| /// Spec: www.w3.org/TR/cors/#access-control-max-age-response-header |  | ||||||
| #[derive(Clone, Copy, PartialEq, Debug)] |  | ||||||
| pub struct AccessControlMaxAge(pub u32); |  | ||||||
|  |  | ||||||
| impl header::Header for AccessControlMaxAge { |  | ||||||
|     #[inline] |  | ||||||
|     fn header_name() -> &'static str { |  | ||||||
|         "Access-Control-Max-Age" |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     fn parse_header(raw: &[Vec<u8>]) -> Option<AccessControlMaxAge> { |  | ||||||
|         header::parsing::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; |  | ||||||
|         write!(f, "{}", num) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,13 +0,0 @@ | |||||||
| pub use self::allow_headers::AccessControlAllowHeaders; |  | ||||||
| pub use self::allow_methods::AccessControlAllowMethods; |  | ||||||
| pub use self::allow_origin::AccessControlAllowOrigin; |  | ||||||
| pub use self::max_age::AccessControlMaxAge; |  | ||||||
| pub use self::request_headers::AccessControlRequestHeaders; |  | ||||||
| pub use self::request_method::AccessControlRequestMethod; |  | ||||||
|  |  | ||||||
| mod allow_headers; |  | ||||||
| mod allow_methods; |  | ||||||
| mod allow_origin; |  | ||||||
| mod max_age; |  | ||||||
| mod request_headers; |  | ||||||
| mod request_method; |  | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| use std::fmt::{self}; |  | ||||||
|  |  | ||||||
| use header; |  | ||||||
|  |  | ||||||
| /// The `Access-Control-Request-Headers` request header, |  | ||||||
| /// part of [CORS](http://www.w3.org/TR/cors/). |  | ||||||
| /// |  | ||||||
| /// > The `Access-Control-Request-Headers` header indicates which headers will |  | ||||||
| /// > be used in the actual request as part of the preflight request. |  | ||||||
| /// |  | ||||||
| /// Spec: www.w3.org/TR/cors/#access-control-request-headers-request-header |  | ||||||
| #[derive(Clone, PartialEq, Debug)] |  | ||||||
| pub struct AccessControlRequestHeaders(pub Vec<String>); |  | ||||||
|  |  | ||||||
| impl header::Header for AccessControlRequestHeaders { |  | ||||||
|     #[inline] |  | ||||||
|     fn header_name() -> &'static str { |  | ||||||
|         "Access-Control-Request-Headers" |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     fn parse_header(raw: &[Vec<u8>]) -> Option<AccessControlRequestHeaders> { |  | ||||||
|         header::parsing::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; |  | ||||||
|         header::parsing::fmt_comma_delimited(f, parts.as_ref()) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @@ -1,32 +0,0 @@ | |||||||
| use std::fmt; |  | ||||||
|  |  | ||||||
| use header; |  | ||||||
| use method::Method; |  | ||||||
|  |  | ||||||
| /// The `Access-Control-Request-Method` request header, |  | ||||||
| /// part of [CORS](http://www.w3.org/TR/cors/). |  | ||||||
| /// |  | ||||||
| /// > The `Access-Control-Request-Method` header indicates which method will be |  | ||||||
| /// > used in the actual request as part of the preflight request. |  | ||||||
| /// |  | ||||||
| /// Spec: www.w3.org/TR/cors/#access-control-request-method-request-header |  | ||||||
| #[derive(Clone, PartialEq, Debug)] |  | ||||||
| pub struct AccessControlRequestMethod(pub Method); |  | ||||||
|  |  | ||||||
| impl header::Header for AccessControlRequestMethod { |  | ||||||
|     #[inline] |  | ||||||
|     fn header_name() -> &'static str { |  | ||||||
|         "Access-Control-Request-Method" |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     fn parse_header(raw: &[Vec<u8>]) -> Option<AccessControlRequestMethod> { |  | ||||||
|         header::parsing::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; |  | ||||||
|         write!(f, "{}", method) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
							
								
								
									
										11
									
								
								src/header/common/access_control_allow_headers.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/header/common/access_control_allow_headers.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | use unicase::UniCase; | ||||||
|  |  | ||||||
|  | header! { | ||||||
|  |     #[doc="`Access-Control-Allow-Headers` header, part of"] | ||||||
|  |     #[doc="[CORS](www.w3.org/TR/cors/#access-control-allow-headers-response-header)"] | ||||||
|  |     #[doc=""] | ||||||
|  |     #[doc="The `Access-Control-Allow-Headers` header indicates, as part of the"] | ||||||
|  |     #[doc="response to a preflight request, which header field names can be used"] | ||||||
|  |     #[doc="during the actual request."] | ||||||
|  |     (AccessControlAllowHeaders, "Access-Control-Allow-Headers") => (UniCase<String>)* | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								src/header/common/access_control_allow_methods.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/header/common/access_control_allow_methods.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | use method::Method; | ||||||
|  |  | ||||||
|  | header! { | ||||||
|  |     #[doc="`Access-Control-Allow-Methods` header, part of"] | ||||||
|  |     #[doc="[CORS](www.w3.org/TR/cors/#access-control-allow-methods-response-header)"] | ||||||
|  |     #[doc=""] | ||||||
|  |     #[doc="The `Access-Control-Allow-Methods` header indicates, as part of the"] | ||||||
|  |     #[doc="response to a preflight request, which methods can be used during the"] | ||||||
|  |     #[doc="actual request."] | ||||||
|  |     (AccessControlAllowMethods, "Access-Control-Allow-Methods") => (Method)* | ||||||
|  | } | ||||||
| @@ -1,8 +1,7 @@ | |||||||
| extern crate url; |  | ||||||
| 
 |  | ||||||
| use std::fmt::{self}; | use std::fmt::{self}; | ||||||
| use std::str; | use std::str; | ||||||
| 
 | 
 | ||||||
|  | use url::Url; | ||||||
| use header; | use header; | ||||||
| 
 | 
 | ||||||
| /// The `Access-Control-Allow-Origin` response header,
 | /// The `Access-Control-Allow-Origin` response header,
 | ||||||
| @@ -16,13 +15,12 @@ use header; | |||||||
| #[derive(Clone, PartialEq, Debug)] | #[derive(Clone, PartialEq, Debug)] | ||||||
| pub enum AccessControlAllowOrigin { | pub enum AccessControlAllowOrigin { | ||||||
|     /// Allow all origins
 |     /// Allow all origins
 | ||||||
|     AllowStar, |     Any, | ||||||
|     /// Allow one particular origin
 |     /// Allow one particular origin
 | ||||||
|     AllowOrigin(url::Url), |     Value(Url), | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl header::Header for AccessControlAllowOrigin { | impl header::Header for AccessControlAllowOrigin { | ||||||
|     #[inline] |  | ||||||
|     fn header_name() -> &'static str { |     fn header_name() -> &'static str { | ||||||
|         "Access-Control-Allow-Origin" |         "Access-Control-Allow-Origin" | ||||||
|     } |     } | ||||||
| @@ -32,10 +30,10 @@ impl header::Header for AccessControlAllowOrigin { | |||||||
|             match str::from_utf8(unsafe { &raw.get_unchecked(0)[..] }) { |             match str::from_utf8(unsafe { &raw.get_unchecked(0)[..] }) { | ||||||
|                 Ok(s) => { |                 Ok(s) => { | ||||||
|                     if s == "*" { |                     if s == "*" { | ||||||
|                         Some(AccessControlAllowOrigin::AllowStar) |                         Some(AccessControlAllowOrigin::Any) | ||||||
|                     } else { |                     } else { | ||||||
|                         url::Url::parse(s).ok().map( |                         Url::parse(s).ok().map( | ||||||
|                             |url| AccessControlAllowOrigin::AllowOrigin(url)) |                             |url| AccessControlAllowOrigin::Value(url)) | ||||||
|                     } |                     } | ||||||
|                 }, |                 }, | ||||||
|                 _ => return None, |                 _ => return None, | ||||||
| @@ -49,8 +47,8 @@ impl header::Header for AccessControlAllowOrigin { | |||||||
| impl header::HeaderFormat for AccessControlAllowOrigin { | impl header::HeaderFormat for AccessControlAllowOrigin { | ||||||
|     fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { |     fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { | ||||||
|         match *self { |         match *self { | ||||||
|             AccessControlAllowOrigin::AllowStar => write!(f, "*"), |             AccessControlAllowOrigin::Any => write!(f, "*"), | ||||||
|             AccessControlAllowOrigin::AllowOrigin(ref url) => |             AccessControlAllowOrigin::Value(ref url) => | ||||||
|                 write!(f, "{}", url) |                 write!(f, "{}", url) | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
							
								
								
									
										8
									
								
								src/header/common/access_control_max_age.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/header/common/access_control_max_age.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | header! { | ||||||
|  |     #[doc="`Access-Control-Max-Age` header, part of"] | ||||||
|  |     #[doc="[CORS](www.w3.org/TR/cors/#access-control-max-age-response-header)"] | ||||||
|  |     #[doc=""] | ||||||
|  |     #[doc="The `Access-Control-Max-Age` header indicates how long the results of a"] | ||||||
|  |     #[doc="preflight request can be cached in a preflight result cache."] | ||||||
|  |     (AccessControlMaxAge, "Access-Control-Max-Age") => [u32] | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								src/header/common/access_control_request_headers.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/header/common/access_control_request_headers.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | use unicase::UniCase; | ||||||
|  |  | ||||||
|  | header! { | ||||||
|  |     #[doc="`Access-Control-Request-Headers` header, part of"] | ||||||
|  |     #[doc="[CORS](www.w3.org/TR/cors/#access-control-request-headers-request-header)"] | ||||||
|  |     #[doc=""] | ||||||
|  |     #[doc="The `Access-Control-Request-Headers` header indicates which headers will"] | ||||||
|  |     #[doc="be used in the actual request as part of the preflight request."] | ||||||
|  |     #[doc="during the actual request."] | ||||||
|  |     (AccessControlRequestHeaders, "Access-Control-Request-Headers") => (UniCase<String>)* | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								src/header/common/access_control_request_method.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/header/common/access_control_request_method.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | use method::Method; | ||||||
|  |  | ||||||
|  | header! { | ||||||
|  |     #[doc="`Access-Control-Request-Method` header, part of"] | ||||||
|  |     #[doc="[CORS](www.w3.org/TR/cors/#access-control-request-method-request-header)"] | ||||||
|  |     #[doc=""] | ||||||
|  |     #[doc="The `Access-Control-Request-Method` header indicates which method will be"] | ||||||
|  |     #[doc="used in the actual request as part of the preflight request."] | ||||||
|  |     (AccessControlRequestMethod, "Access-Control-Request-Method") => [Method] | ||||||
|  | } | ||||||
| @@ -6,8 +6,13 @@ | |||||||
| //! strongly-typed theme, the [mime](http://seanmonstar.github.io/mime.rs) crate | //! strongly-typed theme, the [mime](http://seanmonstar.github.io/mime.rs) crate | ||||||
| //! is used, such as `ContentType(pub Mime)`. | //! is used, such as `ContentType(pub Mime)`. | ||||||
|  |  | ||||||
| pub use self::access_control::*; |  | ||||||
| pub use self::accept::Accept; | pub use self::accept::Accept; | ||||||
|  | pub use self::access_control_allow_headers::AccessControlAllowHeaders; | ||||||
|  | pub use self::access_control_allow_methods::AccessControlAllowMethods; | ||||||
|  | pub use self::access_control_allow_origin::AccessControlAllowOrigin; | ||||||
|  | pub use self::access_control_max_age::AccessControlMaxAge; | ||||||
|  | pub use self::access_control_request_headers::AccessControlRequestHeaders; | ||||||
|  | pub use self::access_control_request_method::AccessControlRequestMethod; | ||||||
| pub use self::accept_charset::AcceptCharset; | pub use self::accept_charset::AcceptCharset; | ||||||
| pub use self::accept_encoding::AcceptEncoding; | pub use self::accept_encoding::AcceptEncoding; | ||||||
| pub use self::accept_language::AcceptLanguage; | pub use self::accept_language::AcceptLanguage; | ||||||
| @@ -216,8 +221,13 @@ macro_rules! header { | |||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
| mod access_control; |  | ||||||
| mod accept; | mod accept; | ||||||
|  | mod access_control_allow_headers; | ||||||
|  | mod access_control_allow_methods; | ||||||
|  | mod access_control_allow_origin; | ||||||
|  | mod access_control_max_age; | ||||||
|  | mod access_control_request_headers; | ||||||
|  | mod access_control_request_method; | ||||||
| mod accept_charset; | mod accept_charset; | ||||||
| mod accept_encoding; | mod accept_encoding; | ||||||
| mod accept_language; | mod accept_language; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user