xapi_shared/repr/
de_datetime.rs1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Deserializer};
3
4pub fn deserialize_empty_or_datetime<'de, D>(
5 deserializer: D,
6) -> Result<Option<DateTime<Utc>>, D::Error>
7where
8 D: Deserializer<'de>,
9{
10 let s: String = Deserialize::deserialize(deserializer)?;
11 if s.is_empty() {
12 Ok(None)
13 } else {
14 let timestamp: i64 = s.parse().map_err(serde::de::Error::custom)?;
15 Ok(Some(
16 DateTime::from_timestamp_millis(timestamp)
17 .ok_or_else(|| serde::de::Error::custom("Invalid timestamp"))?,
18 ))
19 }
20}