diff --git a/src/header/common/if_modified_since.rs b/src/header/common/if_modified_since.rs new file mode 100644 index 00000000..8b2d60c4 --- /dev/null +++ b/src/header/common/if_modified_since.rs @@ -0,0 +1,42 @@ +use std::fmt::{mod, Show}; +use std::str::FromStr; +use time::Tm; +use header::{Header, HeaderFormat}; +use super::util::{from_one_raw_str, tm_from_str}; + +/// The `If-Modified-Since` header field. +#[deriving(PartialEq, Clone)] +pub struct IfModifiedSince(pub Tm); + +deref!(IfModifiedSince -> Tm) + +impl Header for IfModifiedSince { + fn header_name(_: Option) -> &'static str { + "If-Modified-Since" + } + + fn parse_header(raw: &[Vec]) -> Option { + from_one_raw_str(raw) + } +} + + +impl HeaderFormat for IfModifiedSince { + fn fmt_header(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + let tm = **self; + match tm.tm_utcoff { + 0 => tm.rfc822().fmt(fmt), + _ => tm.to_utc().rfc822().fmt(fmt) + } + } +} + +impl FromStr for IfModifiedSince { + fn from_str(s: &str) -> Option { + tm_from_str(s).map(IfModifiedSince) + } +} + +bench_header!(imf_fixdate, IfModifiedSince, { vec![b"Sun, 07 Nov 1994 08:48:37 GMT".to_vec()] }) +bench_header!(rfc_850, IfModifiedSince, { vec![b"Sunday, 06-Nov-94 08:49:37 GMT".to_vec()] }) +bench_header!(asctime, IfModifiedSince, { vec![b"Sun Nov 6 08:49:37 1994".to_vec()] }) diff --git a/src/header/common/mod.rs b/src/header/common/mod.rs index 0faca3c3..38476925 100644 --- a/src/header/common/mod.rs +++ b/src/header/common/mod.rs @@ -102,6 +102,9 @@ pub mod host; /// Exposes the LastModified header. pub mod last_modified; +/// Exposes the If-Modified-Since header. +pub mod if_modified_since; + /// Exposes the Location header. pub mod location;