From 205c980cf0c75c6b8267491ade1e45cb2e91a61d Mon Sep 17 00:00:00 2001 From: Edward Barnard Date: Sat, 6 Oct 2018 20:21:53 +0100 Subject: Manually implement Hash for Date to keep minimum supported Rust version at 1.18.0. --- src/date.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src') 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(&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 for Date { fn from(date: SystemTime) -> Self { Date { inner: date } -- cgit v1.2.3