use crate::documents::BuildXML; use crate::xml_builder::*; use super::*; use serde::Serialize; #[derive(Debug, Clone, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] pub struct Numbering { id: usize, abstract_num_id: usize, level_overrides: Vec, } impl Numbering { pub fn new(id: usize, abstract_num_id: usize) -> Self { Self { id, abstract_num_id, level_overrides: vec![], } } pub fn overrides(mut self, overrides: Vec) -> Self { self.level_overrides = overrides; self } } impl BuildXML for Numbering { fn build(&self) -> Vec { let b = XMLBuilder::new(); let id = format!("{}", self.id); let abs_id = format!("{}", self.abstract_num_id); b.open_num(&id).abstract_num_id(&abs_id).close().build() } } #[cfg(test)] mod tests { use super::*; #[cfg(test)] use pretty_assertions::assert_eq; use std::str; #[test] fn test_numbering() { let c = Numbering::new(0, 2); let b = c.build(); assert_eq!( str::from_utf8(&b).unwrap(), r#" "# ); } /* TODO: enable when builder implemented #[test] fn test_numbering_override() { let c = Numbering::new(0, 2); let overrides = vec![ LevelOverride::new(0).start(1), LevelOverride::new(1).start(1), ]; let b = c.overrides(overrides).build(); assert_eq!( str::from_utf8(&b).unwrap(), r#" "# ); } */ #[test] fn test_numbering_override_json() { let c = Numbering::new(0, 2); let overrides = vec![ LevelOverride::new(0).start(1), LevelOverride::new(1).start(1), ]; assert_eq!( serde_json::to_string(&c.overrides(overrides)).unwrap(), r#"{"id":0,"abstractNumId":2,"levelOverrides":[{"level":0,"start":1},{"level":1,"start":1}]}"# ); } }