#![forbid(unsafe_code)]
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use time::OffsetDateTime;
use time::serde::rfc3339;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Timestamp(OffsetDateTime);
impl Timestamp {
#[must_use]
pub fn now() -> Self {
Self(OffsetDateTime::now_utc())
}
#[must_use]
pub const fn from_offset_date_time(value: OffsetDateTime) -> Self {
Self(value)
}
#[must_use]
pub const fn into_inner(self) -> OffsetDateTime {
self.0
}
#[must_use]
pub const fn as_offset_date_time(&self) -> &OffsetDateTime {
&self.0
}
}
impl Serialize for Timestamp {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
rfc3339::serialize(&self.0, serializer)
}
}
impl<'de> Deserialize<'de> for Timestamp {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
rfc3339::deserialize(deserializer).map(Self)
}
}