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