docx_rs/documents/elements/
wps_text_box.rs

1use super::*;
2use serde::Serialize;
3use std::io::Write;
4
5use crate::documents::BuildXML;
6use crate::xml_builder::*;
7
8#[derive(Debug, Clone, Serialize, PartialEq, Default)]
9#[serde(rename_all = "camelCase")]
10pub struct WpsTextBox {
11    pub children: Vec<TextBoxContent>,
12    pub has_numbering: bool,
13}
14
15impl WpsTextBox {
16    pub fn new() -> WpsTextBox {
17        Default::default()
18    }
19
20    pub fn add_content(mut self, c: TextBoxContent) -> Self {
21        if c.has_numbering {
22            self.has_numbering = true
23        }
24        self.children.push(c);
25        self
26    }
27}
28
29impl BuildXML for WpsTextBox {
30    fn build_to<W: Write>(
31        &self,
32        stream: xml::writer::EventWriter<W>,
33    ) -> xml::writer::Result<xml::writer::EventWriter<W>> {
34        XMLBuilder::from(stream)
35            .open_wp_text_box()?
36            .add_children(&self.children)?
37            .close()?
38            .into_inner()
39    }
40}
41
42#[cfg(test)]
43mod tests {
44
45    use super::*;
46    #[cfg(test)]
47    use pretty_assertions::assert_eq;
48    use std::str;
49
50    #[test]
51    fn test_wp_text_box_build() {
52        let c = TextBoxContent::new().add_paragraph(Paragraph::new());
53        let b = WpsTextBox::new().add_content(c).build();
54        assert_eq!(
55            str::from_utf8(&b).unwrap(),
56            r#"<wps:txbx><w:txbxContent><w:p w14:paraId="12345678"><w:pPr><w:rPr /></w:pPr></w:p></w:txbxContent></wps:txbx>"#
57        );
58    }
59}