docx_rs/documents/elements/
wps_text_box.rs1use 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}