parse_sap_atom_feed/deserializers/edm_datetime/
mod.rs1use chrono::NaiveDateTime;
2use serde::{
3 de::{self, Visitor},
4 Deserialize, Deserializer,
5};
6use std::{fmt, str::FromStr};
7
8#[allow(dead_code)]
11struct NaiveDateTimeVisitor;
12
13impl<'de> Visitor<'de> for NaiveDateTimeVisitor {
14 type Value = NaiveDateTime;
15
16 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
17 formatter.write_str("an XML tag a date time formatted either as <d:DeliveryDate>2018-01-07T23:00:00.0000000</d:DeliveryDate> or <d:DateOfBirth m:null=\"true\"/>")
18 }
19
20 fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
21 where
22 E: de::Error,
23 {
24 match NaiveDateTime::from_str(&value) {
25 Ok(ndt) => Ok(ndt),
26 Err(err) => Err(de::Error::custom(err.to_string())),
27 }
28 }
29}
30
31pub fn to_naive_date_time_opt<'de, D>(deserializer: D) -> Result<Option<NaiveDateTime>, D::Error>
33where
34 D: Deserializer<'de>,
35{
36 Ok(NaiveDateTime::deserialize(deserializer).ok())
37}
38
39pub fn to_naive_date_time<'de, D>(deserializer: D) -> Result<NaiveDateTime, D::Error>
41where
42 D: Deserializer<'de>,
43{
44 NaiveDateTime::deserialize(deserializer)
45}
46
47#[cfg(test)]
49pub mod unit_tests;