xml_data/serializer/
inner.rs

1use crate::{
2	serializer::{
3		Element,
4		Serializer,
5	},
6	Result,
7};
8use std::borrow::Cow;
9
10/// Convenience interface to serialize collections of elements
11pub trait Inner {
12	/// Serialize all contained elements
13	fn serialize_elements<S: Serializer>(&self, serializer: &mut S) -> Result<()>;
14}
15
16/// Simply serialize inner text
17impl Inner for String {
18	fn serialize_elements<S: Serializer>(&self, serializer: &mut S) -> Result<()> {
19		serializer.serialize_text(self.into())
20	}
21}
22
23impl Inner for Cow<'_, str> {
24	fn serialize_elements<S: Serializer>(&self, serializer: &mut S) -> Result<()> {
25		serializer.serialize_text(self.as_ref().into())
26	}
27}
28
29/// Simply serialize the element
30impl<E: Element> Inner for E {
31	fn serialize_elements<S: Serializer>(&self, serializer: &mut S) -> Result<()> {
32		serializer.serialize_element(self)
33	}
34}
35
36/// Serialize inner data if present
37impl<I: Inner> Inner for Option<I> {
38	fn serialize_elements<S: Serializer>(&self, serializer: &mut S) -> Result<()> {
39		if let Some(i) = self {
40			i.serialize_elements(serializer)?;
41		}
42		Ok(())
43	}
44}
45
46/// Serialize all inner data
47impl<I: Inner> Inner for Vec<I> {
48	fn serialize_elements<S: Serializer>(&self, serializer: &mut S) -> Result<()> {
49		for i in self {
50			i.serialize_elements(serializer)?;
51		}
52		Ok(())
53	}
54}