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}