use super::{DocDefaults, Style}; use crate::documents::BuildXML; use crate::types::*; use crate::xml_builder::*; #[derive(Debug)] pub struct Styles<'a> { doc_defaults: DocDefaults, styles: Vec>, } impl<'a> Styles<'a> { pub fn new() -> Styles<'a> { Default::default() } pub fn add_style(mut self, style: Style<'a>) -> Self { self.styles.push(style); self } } impl<'a> Default for Styles<'a> { fn default() -> Self { Self { doc_defaults: DocDefaults::new(), styles: vec![], } } } impl<'a> BuildXML for Styles<'a> { fn build(&self) -> Vec { let b = XMLBuilder::new(); let normal = Style::new("Normal", "Normal", StyleType::Paragraph); b.open_styles() .add_child(&self.doc_defaults) .add_child(&normal) .add_children(&self.styles) .close() .build() } } #[cfg(test)] mod tests { use super::*; use crate::types::StyleType; #[cfg(test)] use pretty_assertions::assert_eq; use std::str; #[test] fn test_style() { let c = Styles::new().add_style(Style::new("Title", "TitleName", StyleType::Paragraph)); let b = c.build(); assert_eq!( str::from_utf8(&b).unwrap(), r#""# ); } }