diff --git a/src/header/parsing.rs b/src/header/parsing.rs index 5727a2b9..1186bbb6 100644 --- a/src/header/parsing.rs +++ b/src/header/parsing.rs @@ -1,9 +1,8 @@ //! Utility functions for Header implementations. -extern crate time; - use std::str; use std::fmt; +use time; /// Reads a single raw string when parsing a header pub fn from_one_raw_str(raw: &[Vec]) -> Option { @@ -83,3 +82,43 @@ pub fn tm_from_str(s: &str) -> Option { time::strptime(s, "%c") }).ok() } + +#[cfg(test)] +mod tests { + use time::Tm; + use super::tm_from_str; + + const NOV_07: Tm = Tm { + tm_nsec: 0, + tm_sec: 37, + tm_min: 48, + tm_hour: 8, + tm_mday: 7, + tm_mon: 10, + tm_year: 94, + tm_wday: 0, + tm_isdst: 0, + tm_yday: 0, + tm_utcoff: 0, + }; + + #[test] + fn test_imf_fixdate() { + assert_eq!(tm_from_str("Sun, 07 Nov 1994 08:48:37 GMT"), + Some(NOV_07)); + } + + #[test] + fn test_rfc_850() { + assert_eq!(tm_from_str("Sunday, 07-Nov-94 08:48:37 GMT"), + Some(NOV_07)); + } + + #[test] + fn test_asctime() { + assert_eq!(tm_from_str("Sun Nov 7 08:48:37 1994"), + Some(NOV_07)); + } + + +} diff --git a/src/header/shared/time.rs b/src/header/shared/time.rs deleted file mode 100644 index 90e72f1d..00000000 --- a/src/header/shared/time.rs +++ /dev/null @@ -1,34 +0,0 @@ -//! Provides utility function to parse HTTP header value time. - -extern crate time; - -/// Get a Tm from HTTP date formats. -// Prior to 1995, there were three different formats commonly used by -// servers to communicate timestamps. For compatibility with old -// implementations, all three are defined here. The preferred format is -// a fixed-length and single-zone subset of the date and time -// specification used by the Internet Message Format [RFC5322]. -// -// HTTP-date = IMF-fixdate / obs-date -// -// An example of the preferred format is -// -// Sun, 06 Nov 1994 08:49:37 GMT ; IMF-fixdate -// -// Examples of the two obsolete formats are -// -// Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format -// Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format -// -// A recipient that parses a timestamp value in an HTTP header field -// MUST accept all three HTTP-date formats. When a sender generates a -// header field that contains one or more timestamps defined as -// HTTP-date, the sender MUST generate those timestamps in the -// IMF-fixdate format. -pub fn tm_from_str(s: &str) -> Option { - time::strptime(s, "%a, %d %b %Y %T %Z").or_else(|_| { - time::strptime(s, "%A, %d-%b-%y %T %Z") - }).or_else(|_| { - time::strptime(s, "%c") - }).ok() -}