diff options
| author | Edward Barnard | 2018-10-06 20:21:53 +0100 |
|---|---|---|
| committer | Edward Barnard | 2018-10-06 20:21:53 +0100 |
| commit | 205c980cf0c75c6b8267491ade1e45cb2e91a61d (patch) | |
| tree | 954e2a422072792834f992c307462d8d767f4153 | |
| parent | 68f412c2bd440733226e5a463c542323000454e4 (diff) | |
| download | rust-plist-205c980cf0c75c6b8267491ade1e45cb2e91a61d.tar.bz2 | |
Manually implement Hash for Date to keep minimum supported Rust version at 1.18.0.
| -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 } |
