headers/common/
if_modified_since.rs
1use std::time::SystemTime;
2use util::HttpDate;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
33pub struct IfModifiedSince(HttpDate);
34
35derive_header! {
36 IfModifiedSince(_),
37 name: IF_MODIFIED_SINCE
38}
39
40impl IfModifiedSince {
41 pub fn is_modified(&self, last_modified: SystemTime) -> bool {
43 self.0 < last_modified.into()
44 }
45}
46
47impl From<SystemTime> for IfModifiedSince {
48 fn from(time: SystemTime) -> IfModifiedSince {
49 IfModifiedSince(time.into())
50 }
51}
52
53impl From<IfModifiedSince> for SystemTime {
54 fn from(date: IfModifiedSince) -> SystemTime {
55 date.0.into()
56 }
57}
58
59#[cfg(test)]
60mod tests {
61 use super::*;
62 use std::time::Duration;
63
64 #[test]
65 fn is_modified() {
66 let newer = SystemTime::now();
67 let exact = newer - Duration::from_secs(2);
68 let older = newer - Duration::from_secs(4);
69
70 let if_mod = IfModifiedSince::from(exact);
71 assert!(if_mod.is_modified(newer));
72 assert!(!if_mod.is_modified(exact));
73 assert!(!if_mod.is_modified(older));
74 }
75}