diff options
| -rw-r--r-- | src/date.rs | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/date.rs b/src/date.rs index 5394ada..89b3118 100644 --- a/src/date.rs +++ b/src/date.rs @@ -1,10 +1,11 @@ use humantime; use std::fmt; +use std::hash::{Hash, Hasher}; use std::result::Result as StdResult; use std::time::{Duration, SystemTime, UNIX_EPOCH}; /// A UTC timestamp. Used for serialization to and from the plist date type. -#[derive(Clone, Copy, Hash, PartialEq)] +#[derive(Clone, Copy, PartialEq)] pub struct Date { inner: SystemTime, } @@ -54,6 +55,23 @@ impl fmt::Debug for Date { } } +// TODO: Remove manual impl once minimum Rust version reaches 1.24.0. +impl Hash for Date { + fn hash<H: Hasher>(&self, state: &mut H) { + let elapsed = match self.inner.duration_since(UNIX_EPOCH) { + Ok(elapsed) => { + false.hash(state); + elapsed + } + Err(err) => { + true.hash(state); + err.duration() + } + }; + elapsed.hash(state) + } +} + impl From<SystemTime> for Date { fn from(date: SystemTime) -> Self { Date { inner: date } |
