1use crate::{Deserialize, Deserializer, Serialize, SerializeAttribute};
4
5impl<'de, T: Deserialize<'de>> Deserialize<'de> for Option<T> {
6 fn deserialize<D: Deserializer<'de>>(reader: D) -> Result<Self, D::Error> {
7 Deserialize::deserialize(reader).map(Some)
8 }
9}
10
11impl<T: Serialize> Serialize for Option<T> {
12 fn serialize<S: crate::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13 if let Some(value) = self {
14 value.serialize(serializer)
15 } else {
16 serializer.serialize_none()
17 }
18 }
19}
20
21impl<T: SerializeAttribute> SerializeAttribute for Option<T> {
22 fn serialize_attribute<S: crate::AttributeSerializer>(
23 &self,
24 mut serializer: S,
25 ) -> Result<S::Ok, S::Error> {
26 if let Some(value) = self {
27 value.serialize_attribute(serializer)
28 } else {
29 serializer.serialize_none()
30 }
31 }
32}