time/serde/
rfc2822.rs
1#[cfg(feature = "parsing")]
9use core::marker::PhantomData;
10
11#[cfg(feature = "formatting")]
12use serde::ser::Error as _;
13#[cfg(feature = "parsing")]
14use serde::Deserializer;
15#[cfg(feature = "formatting")]
16use serde::{Serialize, Serializer};
17
18#[cfg(feature = "parsing")]
19use super::Visitor;
20use crate::format_description::well_known::Rfc2822;
21use crate::OffsetDateTime;
22
23#[cfg(feature = "formatting")]
25pub fn serialize<S: Serializer>(
26 datetime: &OffsetDateTime,
27 serializer: S,
28) -> Result<S::Ok, S::Error> {
29 datetime
30 .format(&Rfc2822)
31 .map_err(S::Error::custom)?
32 .serialize(serializer)
33}
34
35#[cfg(feature = "parsing")]
37pub fn deserialize<'a, D: Deserializer<'a>>(deserializer: D) -> Result<OffsetDateTime, D::Error> {
38 deserializer.deserialize_str(Visitor::<Rfc2822>(PhantomData))
39}
40
41pub mod option {
49 #[allow(clippy::wildcard_imports)]
50 use super::*;
51
52 #[cfg(feature = "formatting")]
54 pub fn serialize<S: Serializer>(
55 option: &Option<OffsetDateTime>,
56 serializer: S,
57 ) -> Result<S::Ok, S::Error> {
58 option
59 .map(|odt| odt.format(&Rfc2822))
60 .transpose()
61 .map_err(S::Error::custom)?
62 .serialize(serializer)
63 }
64
65 #[cfg(feature = "parsing")]
67 pub fn deserialize<'a, D: Deserializer<'a>>(
68 deserializer: D,
69 ) -> Result<Option<OffsetDateTime>, D::Error> {
70 deserializer.deserialize_option(Visitor::<Option<Rfc2822>>(PhantomData))
71 }
72}