diff options
Diffstat (limited to 'third_party/rust/headers/src/common/pragma.rs')
-rw-r--r-- | third_party/rust/headers/src/common/pragma.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/third_party/rust/headers/src/common/pragma.rs b/third_party/rust/headers/src/common/pragma.rs new file mode 100644 index 0000000000..9b953978ff --- /dev/null +++ b/third_party/rust/headers/src/common/pragma.rs @@ -0,0 +1,61 @@ +use HeaderValue; + +/// The `Pragma` header defined by HTTP/1.0. +/// +/// > The "Pragma" header field allows backwards compatibility with +/// > HTTP/1.0 caches, so that clients can specify a "no-cache" request +/// > that they will understand (as Cache-Control was not defined until +/// > HTTP/1.1). When the Cache-Control header field is also present and +/// > understood in a request, Pragma is ignored. +/// > In HTTP/1.0, Pragma was defined as an extensible field for +/// > implementation-specified directives for recipients. This +/// > specification deprecates such extensions to improve interoperability. +/// +/// Spec: [https://tools.ietf.org/html/rfc7234#section-5.4][url] +/// +/// [url]: https://tools.ietf.org/html/rfc7234#section-5.4 +/// +/// # Examples +/// +/// ``` +/// # extern crate headers; +/// use headers::Pragma; +/// +/// let pragma = Pragma::no_cache(); +/// ``` +#[derive(Clone, Debug, PartialEq)] +pub struct Pragma(HeaderValue); + +derive_header! { + Pragma(_), + name: PRAGMA +} + +impl Pragma { + /// Construct the literal `no-cache` Pragma header. + pub fn no_cache() -> Pragma { + Pragma(HeaderValue::from_static("no-cache")) + } + + /// Return whether this pragma is `no-cache`. + pub fn is_no_cache(&self) -> bool { + self.0 == "no-cache" + } +} + +#[cfg(test)] +mod tests { + use super::super::test_decode; + use super::Pragma; + + #[test] + fn no_cache_is_no_cache() { + assert!(Pragma::no_cache().is_no_cache()); + } + + #[test] + fn etc_is_not_no_cache() { + let ext = test_decode::<Pragma>(&["dexter"]).unwrap(); + assert!(!ext.is_no_cache()); + } +} |