xapi-shared 0.0.1

XAPI Shared Library
Documentation
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"))?,
        ))
    }
}