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