use super::{Paragraph, Run, TableCellProperty}; use crate::documents::BuildXML; use crate::xml_builder::*; #[derive(Debug, Clone)] pub struct TableCell { property: TableCellProperty, contents: Vec, } #[derive(Debug, Clone)] pub enum TableCellContent { Paragraph(Paragraph), } impl TableCell { pub fn new(w: usize) -> TableCell { let property = TableCellProperty::new(w); let contents = vec![]; Self { property, contents } } pub fn add_paragraph(mut self, p: Paragraph) -> TableCell { self.contents.push(TableCellContent::Paragraph(p)); self } } impl BuildXML for TableCell { fn build(&self) -> Vec { let b = XMLBuilder::new(); let mut b = b.open_table_cell().add_child(&self.property); for c in &self.contents { match c { TableCellContent::Paragraph(p) => b = b.add_child(p), } } b.close().build() } } #[cfg(test)] mod tests { use super::*; #[cfg(test)] use pretty_assertions::assert_eq; use std::str; #[test] fn test_cell() { let b = TableCell::new(200).build(); assert_eq!( str::from_utf8(&b).unwrap(), r#""# ); } #[test] fn test_cell_add_p() { let b = TableCell::new(200) .add_paragraph(Paragraph::new().add_run(Run::new("Hello"))) .build(); assert_eq!( str::from_utf8(&b).unwrap(), r#"Hello"# ); } }