use serde::de::Error;
use serde::{Deserialize, Deserializer, Serializer};
use std::fmt::Display;
use time::OffsetDateTime;
use url::Url;
pub(crate) fn set_query_args<K: Display, V: Display>(
url: &mut Url,
query_args: impl Iterator<Item = (K, V)>,
) {
let mut args = url.query_pairs_mut();
query_args.into_iter().for_each(|(key, value)| {
args.append_pair(format!("{}", key).as_str(), format!("{}", value).as_str());
});
}
pub(crate) fn de_milliseconds<'de, D>(deserializer: D) -> Result<OffsetDateTime, D::Error>
where
D: Deserializer<'de>,
{
let millis: i64 = Deserialize::deserialize(deserializer)?;
OffsetDateTime::from_unix_timestamp(millis / 1000).map_err(Error::custom)
}
pub(crate) fn se_milliseconds<S>(x: &OffsetDateTime, s: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
s.serialize_i64(x.unix_timestamp())
}