use serde_json::{Map, Value};
pub type JsonObject = Map<String, Value>;
pub mod millis {
use chrono::{DateTime, TimeZone, Utc};
use serde::{Deserialize, Deserializer, Serializer};
pub fn serialize<S: Serializer>(value: &DateTime<Utc>, ser: S) -> Result<S::Ok, S::Error> {
ser.serialize_i64(value.timestamp_millis())
}
pub mod option {
use super::*;
pub fn serialize<S: Serializer>(
value: &Option<DateTime<Utc>>,
ser: S,
) -> Result<S::Ok, S::Error> {
match value {
Some(v) => super::serialize(v, ser),
None => ser.serialize_none(),
}
}
pub fn deserialize<'de, D: Deserializer<'de>>(
de: D,
) -> Result<Option<DateTime<Utc>>, D::Error> {
let raw = Option::<i64>::deserialize(de)?;
Ok(raw.and_then(|ms| Utc.timestamp_millis_opt(ms).single()))
}
}
}