Skip to main content

docx_rs/documents/
build_xml.rs

1use crate::xml_builder::XMLBuilder;
2use std::io::Write;
3
4pub trait BuildXML {
5    /// Write XML to the output stream.
6    #[doc(hidden)]
7    fn build_to<W: Write>(
8        &self,
9        stream: crate::xml::writer::EventWriter<W>,
10    ) -> crate::xml::writer::Result<crate::xml::writer::EventWriter<W>>;
11
12    #[doc(hidden)]
13    fn build(&self) -> Vec<u8> {
14        self.build_to(
15            XMLBuilder::new(Vec::new())
16                .into_inner()
17                .expect("failed to create XML builder"),
18        )
19        .expect("should write to buf")
20        .into_inner()
21        .expect("failed to extract buffer")
22    }
23}
24
25impl<T: BuildXML> BuildXML for &T {
26    /// Building XML from `&T` is the same as from `T`.
27    fn build_to<W: Write>(
28        &self,
29        stream: crate::xml::writer::EventWriter<W>,
30    ) -> crate::xml::writer::Result<crate::xml::writer::EventWriter<W>> {
31        (*self).build_to(stream)
32    }
33}
34
35impl<T: BuildXML> BuildXML for Box<T> {
36    /// Building XML from `Box<T>` is the same as from `T`.
37    fn build_to<W: Write>(
38        &self,
39        stream: crate::xml::writer::EventWriter<W>,
40    ) -> crate::xml::writer::Result<crate::xml::writer::EventWriter<W>> {
41        (**self).build_to(stream)
42    }
43}