pub mod ignore_media_retention_policy {
use matrix_sdk_base::media::store::IgnoreMediaRetentionPolicy;
use serde::{Deserializer, Serializer};
pub fn serialize<S>(ignore_policy: &IgnoreMediaRetentionPolicy, s: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
s.serialize_u8(match ignore_policy {
IgnoreMediaRetentionPolicy::Yes => 1,
IgnoreMediaRetentionPolicy::No => 0,
})
}
pub fn deserialize<'de, D>(d: D) -> Result<IgnoreMediaRetentionPolicy, D::Error>
where
D: Deserializer<'de>,
{
Ok(match serde::de::Deserialize::deserialize(d)? {
0u8 => IgnoreMediaRetentionPolicy::No,
_ => IgnoreMediaRetentionPolicy::Yes,
})
}
}
pub mod unix_time {
use std::time::Duration;
use serde::{Deserializer, Serializer};
use crate::media_store::types::UnixTime;
pub fn serialize<S>(unix_time: &UnixTime, s: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
s.serialize_i64(match unix_time {
UnixTime::BeforeEpoch(duration) => {
-i64::try_from(duration.as_secs()).map_err(serde::ser::Error::custom)?
}
UnixTime::AfterEpoch(duration) => {
i64::try_from(duration.as_secs()).map_err(serde::ser::Error::custom)?
}
})
}
pub fn deserialize<'de, D>(d: D) -> Result<UnixTime, D::Error>
where
D: Deserializer<'de>,
{
let seconds: i64 = serde::de::Deserialize::deserialize(d)?;
Ok(match seconds {
seconds @ ..0 => UnixTime::BeforeEpoch(Duration::from_secs(seconds.unsigned_abs())),
seconds @ 0.. => UnixTime::AfterEpoch(Duration::from_secs(seconds.unsigned_abs())),
})
}
}