#[cfg(feature = "parsing")]
use core::marker::PhantomData;
#[cfg(feature = "parsing")]
use serde_core::Deserializer;
#[cfg(feature = "formatting")]
use serde_core::ser::Error as _;
#[cfg(feature = "formatting")]
use serde_core::{Serialize, Serializer};
#[cfg(feature = "parsing")]
use super::Visitor;
use crate::OffsetDateTime;
use crate::format_description::well_known::Rfc2822;
#[cfg(feature = "formatting")]
#[inline]
pub fn serialize<S>(datetime: &OffsetDateTime, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
datetime
.format(&Rfc2822)
.map_err(S::Error::custom)?
.serialize(serializer)
}
#[cfg(feature = "parsing")]
#[inline]
pub fn deserialize<'a, D>(deserializer: D) -> Result<OffsetDateTime, D::Error>
where
D: Deserializer<'a>,
{
deserializer.deserialize_str(Visitor::<Rfc2822>(PhantomData))
}
pub mod option {
use super::*;
#[cfg(feature = "formatting")]
#[inline]
pub fn serialize<S>(option: &Option<OffsetDateTime>, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
option
.map(|odt| odt.format(&Rfc2822))
.transpose()
.map_err(S::Error::custom)?
.serialize(serializer)
}
#[cfg(feature = "parsing")]
#[inline]
pub fn deserialize<'a, D>(deserializer: D) -> Result<Option<OffsetDateTime>, D::Error>
where
D: Deserializer<'a>,
{
deserializer.deserialize_option(Visitor::<Option<Rfc2822>>(PhantomData))
}
}