Merge pull request #183 from cmr/if-modified-since
header: add If-Modified-Since support
This commit is contained in:
		
							
								
								
									
										42
									
								
								src/header/common/if_modified_since.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/header/common/if_modified_since.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -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<IfModifiedSince>) -> &'static str { | ||||||
|  |         "If-Modified-Since" | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fn parse_header(raw: &[Vec<u8>]) -> Option<IfModifiedSince> { | ||||||
|  |         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<IfModifiedSince> { | ||||||
|  |         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()] }) | ||||||
| @@ -102,6 +102,9 @@ pub mod host; | |||||||
| /// Exposes the LastModified header. | /// Exposes the LastModified header. | ||||||
| pub mod last_modified; | pub mod last_modified; | ||||||
|  |  | ||||||
|  | /// Exposes the If-Modified-Since header. | ||||||
|  | pub mod if_modified_since; | ||||||
|  |  | ||||||
| /// Exposes the Location header. | /// Exposes the Location header. | ||||||
| pub mod location; | pub mod location; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user