static mut PRETTIFY: bool = false;
pub unsafe fn prettify_serialize() {
unsafe {
PRETTIFY = true;
}
}
#[inline]
pub fn should_prettify() -> bool {
unsafe { PRETTIFY }
}
pub mod instant {
use jiff::Timestamp;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
pub fn serialize<S>(dt: &Timestamp, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
if super::should_prettify() {
dt.serialize(serializer)
} else {
(dt.as_nanosecond() as i64).serialize(serializer)
}
}
pub fn deserialize<'de, D>(d: D) -> Result<Timestamp, D::Error>
where
D: Deserializer<'de>,
{
let i = i64::deserialize(d)?;
Timestamp::from_nanosecond(i as i128).map_err(serde::de::Error::custom)
}
}
pub mod instant_option {
use jiff::Timestamp;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
pub fn serialize<S>(dt: &Option<Timestamp>, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
if super::should_prettify() {
dt.serialize(serializer)
} else {
dt.map(|t| t.as_nanosecond() as i64).serialize(serializer)
}
}
pub fn deserialize<'de, D>(d: D) -> Result<Option<Timestamp>, D::Error>
where
D: Deserializer<'de>,
{
let oi = Option::<i64>::deserialize(d)?;
oi.map(|i| Timestamp::from_nanosecond(i as i128))
.transpose()
.map_err(serde::de::Error::custom)
}
}