use chrono::{DateTime, Utc};
use serde::{Deserialize, Deserializer};
pub fn deserialize_empty_or_datetime<'de, D>(
deserializer: D,
) -> Result<Option<DateTime<Utc>>, D::Error>
where
D: Deserializer<'de>,
{
let s: String = Deserialize::deserialize(deserializer)?;
if s.is_empty() {
Ok(None)
} else {
let timestamp: i64 = s.parse().map_err(serde::de::Error::custom)?;
Ok(Some(
DateTime::from_timestamp_millis(timestamp)
.ok_or_else(|| serde::de::Error::custom("Invalid timestamp"))?,
))
}
}