headers/common/
content_location.rs

1use HeaderValue;
2
3/// `Content-Location` header, defined in
4/// [RFC7231](https://tools.ietf.org/html/rfc7231#section-3.1.4.2)
5///
6/// The header can be used by both the client in requests and the server
7/// in responses with different semantics. Client sets `Content-Location`
8/// to refer to the URI where original representation of the body was
9/// obtained.
10///
11/// In responses `Content-Location` represents URI for the representation
12/// that was content negotiated, created or for the response payload.
13///
14/// # ABNF
15///
16/// ```text
17/// Content-Location = absolute-URI / partial-URI
18/// ```
19///
20/// # Example values
21///
22/// * `/hypertext/Overview.html`
23/// * `http://www.example.org/hypertext/Overview.html`
24///
25/// # Examples
26///
27#[derive(Clone, Debug, PartialEq)]
28pub struct ContentLocation(HeaderValue);
29
30derive_header! {
31    ContentLocation(_),
32    name: CONTENT_LOCATION
33}
34
35#[cfg(test)]
36mod tests {
37    use super::super::test_decode;
38    use super::*;
39
40    #[test]
41    fn absolute_uri() {
42        let s = "http://www.example.net/index.html";
43        let loc = test_decode::<ContentLocation>(&[s]).unwrap();
44
45        assert_eq!(loc, ContentLocation(HeaderValue::from_static(s)));
46    }
47
48    #[test]
49    fn relative_uri_with_fragment() {
50        let s = "/People.html#tim";
51        let loc = test_decode::<ContentLocation>(&[s]).unwrap();
52
53        assert_eq!(loc, ContentLocation(HeaderValue::from_static(s)));
54    }
55}