docx_rs/documents/elements/
based_on.rs

1use serde::{Serialize, Serializer};
2use std::io::Write;
3
4use crate::documents::BuildXML;
5use crate::escape::escape;
6use crate::xml_builder::*;
7
8#[derive(Debug, Clone, PartialEq)]
9pub struct BasedOn {
10    val: String,
11}
12
13impl BasedOn {
14    pub fn new(val: impl Into<String>) -> BasedOn {
15        BasedOn {
16            val: escape(&val.into()),
17        }
18    }
19}
20
21impl Serialize for BasedOn {
22    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
23    where
24        S: Serializer,
25    {
26        serializer.serialize_str(&self.val)
27    }
28}
29
30impl BuildXML for BasedOn {
31    fn build_to<W: Write>(
32        &self,
33        stream: xml::writer::EventWriter<W>,
34    ) -> xml::writer::Result<xml::writer::EventWriter<W>> {
35        XMLBuilder::from(stream).based_on(&self.val)?.into_inner()
36    }
37}
38
39#[cfg(test)]
40mod tests {
41
42    use super::*;
43    #[cfg(test)]
44    use pretty_assertions::assert_eq;
45    use std::str;
46
47    #[test]
48    fn test_build() {
49        let c = BasedOn::new("Normal");
50        let b = c.build();
51        assert_eq!(
52            str::from_utf8(&b).unwrap(),
53            r#"<w:basedOn w:val="Normal" />"#
54        );
55    }
56}