haste_fhir_model/r4/datetime/
serialize.rs1use 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}