/ src / date_format.rs
date_format.rs
 1  use serde::Deserialize;
 2  use serde::{Deserializer, Serializer};
 3  use time::macros::format_description;
 4  
 5  const DATE_FORMAT: &[time::format_description::FormatItem<'_>] =
 6      format_description!("[year]-[month]-[day]");
 7  
 8  pub fn serialize<S>(date: &time::Date, serializer: S) -> Result<S::Ok, S::Error>
 9  where
10      S: Serializer,
11  {
12      let s = date
13          .format(DATE_FORMAT)
14          .map_err(serde::ser::Error::custom)?;
15      serializer.serialize_str(&s)
16  }
17  
18  pub fn deserialize<'de, D>(deserializer: D) -> Result<time::Date, D::Error>
19  where
20      D: Deserializer<'de>,
21  {
22      let s = String::deserialize(deserializer)?;
23      time::Date::parse(&s, DATE_FORMAT).map_err(serde::de::Error::custom)
24  }