Line data Source code
1 : use chrono::{DateTime, NaiveDateTime, Utc};
2 : use serde::{self, Deserialize, Deserializer, Serializer};
3 :
4 : pub const FORMAT: &'static str = "%Y-%m-%dT%H:%M:%SZ";
5 :
6 20 : pub fn serialize<S>(date: &DateTime<Utc>, serializer: S) -> Result<S::Ok, S::Error>
7 20 : where
8 20 : S: Serializer,
9 : {
10 20 : let s = format!("{}", date.format(FORMAT));
11 20 : serializer.serialize_str(&s)
12 20 : }
13 3 : pub fn deserialize<'de, D>(deserializer: D) -> Result<DateTime<Utc>, D::Error>
14 3 : where
15 3 : D: Deserializer<'de>,
16 : {
17 3 : let s = String::deserialize(deserializer)?;
18 3 : let dt = NaiveDateTime::parse_from_str(&s, FORMAT).map_err(serde::de::Error::custom)?;
19 2 : Ok(DateTime::<Utc>::from_naive_utc_and_offset(dt, Utc))
20 3 : }
|