docx_rust/document/
table_grid.rs

1use hard_xml::{XmlRead, XmlWrite};
2
3use crate::__xml_test_suites;
4use crate::document::GridColumn;
5
6/// Table Grid
7///
8/// ```rust
9/// use docx_rust::document::*;
10///
11/// let grid = TableGrid::from(vec![42, 42]);
12///
13/// let grid = TableGrid::default()
14///     .push_column(42)
15///     .push_column(42);
16/// ```
17#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
18#[cfg_attr(test, derive(PartialEq))]
19#[xml(tag = "w:tblGrid")]
20pub struct TableGrid {
21    #[xml(child = "w:gridCol")]
22    pub columns: Vec<GridColumn>,
23}
24
25impl TableGrid {
26    pub fn push_column<T: Into<GridColumn>>(mut self, col: T) -> Self {
27        self.columns.push(col.into());
28        self
29    }
30}
31
32impl From<Vec<isize>> for TableGrid {
33    fn from(cols: Vec<isize>) -> TableGrid {
34        TableGrid {
35            columns: cols.into_iter().map(Into::into).collect(),
36        }
37    }
38}
39
40__xml_test_suites!(
41    TableGrid,
42    TableGrid::default(),
43    "<w:tblGrid/>",
44    TableGrid::default().push_column(42),
45    r#"<w:tblGrid><w:gridCol w:w="42"/></w:tblGrid>"#,
46    TableGrid::default().push_column(42).push_column(42),
47    r#"<w:tblGrid><w:gridCol w:w="42"/><w:gridCol w:w="42"/></w:tblGrid>"#,
48    TableGrid::from(vec![42, 42]),
49    r#"<w:tblGrid><w:gridCol w:w="42"/><w:gridCol w:w="42"/></w:tblGrid>"#,
50);