Skip to main content

docx_rs/documents/elements/
fit_text.rs

1use crate::documents::BuildXML;
2use crate::xml_builder::*;
3use serde::Serialize;
4use std::io::Write;
5
6#[derive(Debug, Clone, PartialEq, Serialize)]
7#[serde(rename_all = "camelCase")]
8pub struct FitText {
9    pub val: usize,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub id: Option<u32>,
12}
13
14impl FitText {
15    pub fn new(val: usize) -> Self {
16        Self { val, id: None }
17    }
18
19    pub fn id(mut self, id: u32) -> Self {
20        self.id = Some(id);
21        self
22    }
23}
24
25impl BuildXML for FitText {
26    fn build_to<W: Write>(
27        &self,
28        stream: crate::xml::writer::EventWriter<W>,
29    ) -> crate::xml::writer::Result<crate::xml::writer::EventWriter<W>> {
30        XMLBuilder::from(stream).fit_text(self.val, self.id)?.into_inner()
31    }
32}
33
34#[cfg(test)]
35mod tests {
36
37    use super::*;
38    #[cfg(test)]
39    use pretty_assertions::assert_eq;
40    use std::str;
41
42    #[test]
43    fn test_fit_text() {
44        let b = FitText::new(840).id(1266434317).build();
45        assert_eq!(
46            str::from_utf8(&b).unwrap(),
47            r#"<w:fitText w:val="840" w:id="1266434317" />"#
48        );
49    }
50
51    #[test]
52    fn test_fit_text_without_id() {
53        let b = FitText::new(840).build();
54        assert_eq!(str::from_utf8(&b).unwrap(), r#"<w:fitText w:val="840" />"#);
55    }
56}