From f783e9913b988f3d5c28707e2291145999756dbe Mon Sep 17 00:00:00 2001 From: Markus Unterwaditzer Date: Mon, 2 Nov 2015 21:54:33 +0100 Subject: [PATCH] feat(headers): Add Access-Control-Expose-Headers Fix #673 --- .../common/access_control_expose_headers.rs | 60 +++++++++++++++++++ src/header/common/mod.rs | 2 + 2 files changed, 62 insertions(+) create mode 100644 src/header/common/access_control_expose_headers.rs diff --git a/src/header/common/access_control_expose_headers.rs b/src/header/common/access_control_expose_headers.rs new file mode 100644 index 0000000000..ac187446c4 --- /dev/null +++ b/src/header/common/access_control_expose_headers.rs @@ -0,0 +1,60 @@ +use unicase::UniCase; + +header! { + /// `Access-Control-Expose-Headers` header, part of + /// [CORS](http://www.w3.org/TR/cors/#access-control-expose-headers-response-header) + /// + /// The Access-Control-Expose-Headers header indicates which headers are safe to expose to the + /// API of a CORS API specification. + /// + /// # ABNF + /// ```plain + /// Access-Control-Expose-Headers = "Access-Control-Expose-Headers" ":" #field-name + /// ``` + /// + /// # Example values + /// * `ETag, Content-Length` + /// + /// # Examples + /// ``` + /// # extern crate hyper; + /// # extern crate unicase; + /// # fn main() { + /// // extern crate unicase; + /// + /// use hyper::header::{Headers, AccessControlExposeHeaders}; + /// use unicase::UniCase; + /// + /// let mut headers = Headers::new(); + /// headers.set( + /// AccessControlExposeHeaders(vec![ + /// UniCase("etag".to_owned()), + /// UniCase("content-length".to_owned()) + /// ]) + /// ); + /// # } + /// ``` + /// ``` + /// # extern crate hyper; + /// # extern crate unicase; + /// # fn main() { + /// // extern crate unicase; + /// + /// use hyper::header::{Headers, AccessControlExposeHeaders}; + /// use unicase::UniCase; + /// + /// let mut headers = Headers::new(); + /// headers.set( + /// AccessControlExposeHeaders(vec![ + /// UniCase("etag".to_owned()), + /// UniCase("content-length".to_owned()) + /// ]) + /// ); + /// # } + /// ``` + (AccessControlExposeHeaders, "Access-Control-Expose-Headers") => (UniCase)* + + test_access_control_expose_headers { + test_header!(test1, vec![b"etag, content-length"]); + } +} diff --git a/src/header/common/mod.rs b/src/header/common/mod.rs index 6ef5c7fe4c..ea1c74cf98 100644 --- a/src/header/common/mod.rs +++ b/src/header/common/mod.rs @@ -10,6 +10,7 @@ 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_expose_headers::AccessControlExposeHeaders; pub use self::access_control_max_age::AccessControlMaxAge; pub use self::access_control_request_headers::AccessControlRequestHeaders; pub use self::access_control_request_method::AccessControlRequestMethod; @@ -355,6 +356,7 @@ mod accept; mod access_control_allow_headers; mod access_control_allow_methods; mod access_control_allow_origin; +mod access_control_expose_headers; mod access_control_max_age; mod access_control_request_headers; mod access_control_request_method;