ext_time/extend_serde.rs
1use serde::{de, Deserialize, Deserializer, Serializer};
2use time::OffsetDateTime;
3
4/// serde serialize OffsetDateTime to Timestamp
5///
6/// `#[serde(serialize_with = "serde_t2ts"]`
7pub fn serde_t2ts<S>(x: &OffsetDateTime, s: S) -> Result<S::Ok, S::Error>
8where
9 S: Serializer,
10{
11 s.serialize_i64(x.unix_timestamp())
12}
13
14/// serde deserialize Timestamp to OffsetDateTime
15///
16/// `#serde[(deserialize_with = "serde_parse_ts")]`
17pub fn serde_parse_ts<'de, D>(deserializer: D) -> Result<OffsetDateTime, D::Error>
18where
19 D: Deserializer<'de>,
20{
21 let t: i64 = Deserialize::deserialize(deserializer)?;
22 OffsetDateTime::from_unix_timestamp(t).map_err(de::Error::custom)
23}