Skip to main content

haste_fhir_model/r4/datetime/
serialize.rs

1use crate::r4::datetime::{
2    Date, DateTime, Instant, Time, parse_date, parse_datetime, parse_instant, parse_time,
3};
4use serde::Deserialize;
5
6impl<'de> Deserialize<'de> for DateTime {
7    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
8    where
9        D: serde::Deserializer<'de>,
10    {
11        let value = String::deserialize(deserializer)?;
12        parse_datetime(&value).map_err(|_| serde::de::Error::custom("invalid FHIR dateTime"))
13    }
14}
15
16impl serde::Serialize for DateTime {
17    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
18    where
19        S: serde::Serializer,
20    {
21        self.to_string().serialize(serializer)
22    }
23}
24
25impl<'de> Deserialize<'de> for Date {
26    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
27    where
28        D: serde::Deserializer<'de>,
29    {
30        let value = String::deserialize(deserializer)?;
31        parse_date(&value).map_err(|_| serde::de::Error::custom("invalid FHIR date"))
32    }
33}
34
35impl serde::Serialize for Date {
36    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
37    where
38        S: serde::Serializer,
39    {
40        self.to_string().serialize(serializer)
41    }
42}
43
44impl serde::Serialize for Time {
45    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
46    where
47        S: serde::Serializer,
48    {
49        self.to_string().serialize(serializer)
50    }
51}
52
53impl<'de> Deserialize<'de> for Time {
54    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
55    where
56        D: serde::Deserializer<'de>,
57    {
58        let value = String::deserialize(deserializer)?;
59        parse_time(&value).map_err(|_| serde::de::Error::custom("invalid FHIR time"))
60    }
61}
62
63impl serde::Serialize for Instant {
64    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
65    where
66        S: serde::Serializer,
67    {
68        self.to_string().serialize(serializer)
69    }
70}
71
72impl<'de> Deserialize<'de> for Instant {
73    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
74    where
75        D: serde::Deserializer<'de>,
76    {
77        let value = String::deserialize(deserializer)?;
78        parse_instant(&value).map_err(|_| serde::de::Error::custom("invalid FHIR instant"))
79    }
80}