1use serde_json::{Map, Value};
2
3pub type JsonObject = Map<String, Value>;
5
6pub mod millis {
8 use chrono::{DateTime, TimeZone, Utc};
9 use serde::{Deserialize, Deserializer, Serializer};
10
11 pub fn serialize<S: Serializer>(value: &DateTime<Utc>, ser: S) -> Result<S::Ok, S::Error> {
12 ser.serialize_i64(value.timestamp_millis())
13 }
14
15 pub mod option {
16 use super::*;
17
18 pub fn serialize<S: Serializer>(
19 value: &Option<DateTime<Utc>>,
20 ser: S,
21 ) -> Result<S::Ok, S::Error> {
22 match value {
23 Some(v) => super::serialize(v, ser),
24 None => ser.serialize_none(),
25 }
26 }
27
28 pub fn deserialize<'de, D: Deserializer<'de>>(
29 de: D,
30 ) -> Result<Option<DateTime<Utc>>, D::Error> {
31 let raw = Option::<i64>::deserialize(de)?;
32 Ok(raw.and_then(|ms| Utc.timestamp_millis_opt(ms).single()))
33 }
34 }
35}