headers/common/
if_unmodified_since.rs1use crate::util::HttpDate;
2use std::time::SystemTime;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
33pub struct IfUnmodifiedSince(HttpDate);
34
35derive_header! {
36 IfUnmodifiedSince(_),
37 name: IF_UNMODIFIED_SINCE
38}
39
40impl IfUnmodifiedSince {
41 pub fn precondition_passes(&self, last_modified: SystemTime) -> bool {
43 self.0 >= last_modified.into()
44 }
45}
46
47impl From<SystemTime> for IfUnmodifiedSince {
48 fn from(time: SystemTime) -> IfUnmodifiedSince {
49 IfUnmodifiedSince(time.into())
50 }
51}
52
53impl From<IfUnmodifiedSince> for SystemTime {
54 fn from(date: IfUnmodifiedSince) -> 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 precondition_passes() {
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_unmod = IfUnmodifiedSince::from(exact);
71 assert!(!if_unmod.precondition_passes(newer));
72 assert!(if_unmod.precondition_passes(exact));
73 assert!(if_unmod.precondition_passes(older));
74 }
75}