xmlity/types/
common.rs

1//! This module contains implementations for common types that do not fit into any other module.
2
3use 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}