docx_rs/documents/elements/
level_override.rs1use super::*;
2use std::io::Write;
3
4use crate::documents::BuildXML;
5use crate::xml_builder::*;
6
7use serde::Serialize;
8
9#[derive(Debug, Clone, PartialEq, Serialize)]
14#[serde(rename_all = "camelCase")]
15pub struct LevelOverride {
16 pub level: usize,
17 pub override_start: Option<usize>,
18 pub override_level: Option<Level>,
19}
20
21impl LevelOverride {
22 pub fn new(level: usize) -> LevelOverride {
23 LevelOverride {
24 level,
25 override_start: None,
26 override_level: None,
27 }
28 }
29
30 pub fn start(mut self, start: usize) -> LevelOverride {
31 self.override_start = Some(start);
32 self
33 }
34
35 pub fn level(mut self, override_level: Level) -> LevelOverride {
36 self.override_level = Some(override_level);
37 self
38 }
39}
40
41impl BuildXML for LevelOverride {
42 fn build_to<W: Write>(
43 &self,
44 stream: xml::writer::EventWriter<W>,
45 ) -> xml::writer::Result<xml::writer::EventWriter<W>> {
46 XMLBuilder::from(stream)
47 .open_level_override(&format!("{}", self.level))?
48 .add_optional_child(&self.override_level)?
49 .apply_opt(self.override_start, |start, b| {
50 b.start_override(&format!("{}", start))
51 })?
52 .close()?
53 .into_inner()
54 }
55}
56
57#[cfg(test)]
58mod tests {
59
60 use super::*;
61 #[cfg(test)]
62 use pretty_assertions::assert_eq;
63 use std::str;
64
65 #[test]
66 fn test_level_override() {
67 let c = LevelOverride::new(1).start(2);
68 let b = c.build();
69 assert_eq!(
70 str::from_utf8(&b).unwrap(),
71 r#"<w:lvlOverride w:ilvl="1"><w:startOverride w:val="2" /></w:lvlOverride>"#
72 );
73 }
74
75 #[test]
76 fn test_override_with_lvl() {
77 let lvl = Level::new(
78 1,
79 Start::new(1),
80 NumberFormat::new("decimal"),
81 LevelText::new("%4."),
82 LevelJc::new("left"),
83 );
84 let c = LevelOverride::new(1).level(lvl);
85 let b = c.build();
86 assert_eq!(
87 str::from_utf8(&b).unwrap(),
88 r#"<w:lvlOverride w:ilvl="1"><w:lvl w:ilvl="1"><w:start w:val="1" /><w:numFmt w:val="decimal" /><w:lvlText w:val="%4." /><w:lvlJc w:val="left" /><w:pPr><w:rPr /></w:pPr><w:rPr /></w:lvl></w:lvlOverride>"#
89 );
90 }
91}