azure_core/date/
rfc1123.rs

1use crate::date::{parse_rfc1123, to_rfc1123};
2use serde::{de, Deserialize, Deserializer, Serializer};
3use time::OffsetDateTime;
4
5pub fn deserialize<'de, D>(deserializer: D) -> Result<OffsetDateTime, D::Error>
6where
7    D: Deserializer<'de>,
8{
9    let s = String::deserialize(deserializer)?;
10    parse_rfc1123(&s).map_err(de::Error::custom)
11}
12
13pub fn serialize<S>(date: &OffsetDateTime, serializer: S) -> Result<S::Ok, S::Error>
14where
15    S: Serializer,
16{
17    serializer.serialize_str(&to_rfc1123(date))
18}
19
20pub mod option {
21    use crate::date::{parse_rfc1123, to_rfc1123};
22    use serde::{Deserialize, Deserializer, Serializer};
23    use time::OffsetDateTime;
24
25    pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<OffsetDateTime>, D::Error>
26    where
27        D: Deserializer<'de>,
28    {
29        let s: Option<String> = Option::deserialize(deserializer)?;
30        s.map(|s| parse_rfc1123(&s).map_err(serde::de::Error::custom))
31            .transpose()
32    }
33
34    pub fn serialize<S>(date: &Option<OffsetDateTime>, serializer: S) -> Result<S::Ok, S::Error>
35    where
36        S: Serializer,
37    {
38        if let Some(date) = date {
39            serializer.serialize_str(&to_rfc1123(date))
40        } else {
41            serializer.serialize_none()
42        }
43    }
44}