summaryrefslogtreecommitdiffstats
path: root/third_party/rust/headers/src/common/location.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/headers/src/common/location.rs')
-rw-r--r--third_party/rust/headers/src/common/location.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/third_party/rust/headers/src/common/location.rs b/third_party/rust/headers/src/common/location.rs
new file mode 100644
index 0000000000..54a1cc513d
--- /dev/null
+++ b/third_party/rust/headers/src/common/location.rs
@@ -0,0 +1,51 @@
+use HeaderValue;
+
+/// `Location` header, defined in
+/// [RFC7231](http://tools.ietf.org/html/rfc7231#section-7.1.2)
+///
+/// The `Location` header field is used in some responses to refer to a
+/// specific resource in relation to the response. The type of
+/// relationship is defined by the combination of request method and
+/// status code semantics.
+///
+/// # ABNF
+///
+/// ```text
+/// Location = URI-reference
+/// ```
+///
+/// # Example values
+/// * `/People.html#tim`
+/// * `http://www.example.net/index.html`
+///
+/// # Examples
+///
+#[derive(Clone, Debug, PartialEq)]
+pub struct Location(HeaderValue);
+
+derive_header! {
+ Location(_),
+ name: LOCATION
+}
+
+#[cfg(test)]
+mod tests {
+ use super::super::test_decode;
+ use super::*;
+
+ #[test]
+ fn absolute_uri() {
+ let s = "http://www.example.net/index.html";
+ let loc = test_decode::<Location>(&[s]).unwrap();
+
+ assert_eq!(loc, Location(HeaderValue::from_static(s)));
+ }
+
+ #[test]
+ fn relative_uri_with_fragment() {
+ let s = "/People.html#tim";
+ let loc = test_decode::<Location>(&[s]).unwrap();
+
+ assert_eq!(loc, Location(HeaderValue::from_static(s)));
+ }
+}