diff --git a/src/lib.rs b/src/lib.rs index a6af13b..d5096b4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -592,10 +592,11 @@ impl fmt::Debug for ParseWeekdayError { #[cfg(feature = "serde")] mod weekday_serde { use super::Weekday; + use std::fmt; use serde::{ser, de}; impl ser::Serialize for Weekday { - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> + fn serialize(&self, serializer: S) -> Result where S: ser::Serializer { serializer.serialize_str(&format!("{:?}", self)) @@ -604,19 +605,23 @@ mod weekday_serde { struct WeekdayVisitor; - impl de::Visitor for WeekdayVisitor { + impl<'de> de::Visitor<'de> for WeekdayVisitor { type Value = Weekday; - fn visit_str(&mut self, value: &str) -> Result + fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "Weekday") + } + + fn visit_str(self, value: &str) -> Result where E: de::Error { - value.parse().map_err(|err| de::Error::custom(err)) + value.parse().map_err(|_| E::custom("short or long weekday names expected")) } } - impl de::Deserialize for Weekday { - fn deserialize(deserializer: &mut D) -> Result - where D: de::Deserializer + impl<'de> de::Deserialize<'de> for Weekday { + fn deserialize(deserializer: D) -> Result + where D: de::Deserializer<'de> { deserializer.deserialize_str(WeekdayVisitor) }