use anyhow::Error; #[derive(Debug, Eq, PartialEq)] pub struct DateTime(chrono::DateTime); impl From> for DateTime { fn from(dt: chrono::DateTime) -> Self { DateTime(dt) } } impl libipld::codec::Encode for DateTime { fn encode(&self, c: libipld_cbor::DagCborCodec, w: &mut W) -> libipld::error::Result<()> { self.0.to_rfc3339().encode(c, w).map_err(Error::from) } } impl libipld::codec::Decode for DateTime { fn decode(c: libipld_cbor::DagCborCodec, r: &mut R) -> libipld::error::Result { String::decode(c, r) .map_err(Error::from) .and_then(|s| { chrono::DateTime::parse_from_rfc3339(&s) .map(|dt| dt.with_timezone(&chrono::Utc)) .map_err(Error::from) }) .map(DateTime) } }