xapi_shared/repr/
de_datetime.rs

1use 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}