docx_rust/formatting/
table_indent.rs

1use hard_xml::{XmlRead, XmlWrite};
2
3use crate::{__string_enum, __xml_test_suites};
4
5/// Table Indent
6///
7/// ```rust
8/// use docx_rust::formatting::*;
9///
10/// let ind = TableIndent::from(42);
11/// let ind = TableIndent::from(TableIndentUnit::Pct);
12/// let ind = TableIndent::from((42, TableIndentUnit::Dxa));
13/// ```
14#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
15#[cfg_attr(test, derive(PartialEq))]
16#[xml(tag = "w:tblInd")]
17pub struct TableIndent {
18    #[xml(attr = "w:w")]
19    pub value: Option<isize>,
20    #[xml(attr = "w:type")]
21    pub unit: Option<TableIndentUnit>,
22}
23
24impl From<isize> for TableIndent {
25    fn from(val: isize) -> Self {
26        TableIndent {
27            value: Some(val),
28            unit: None,
29        }
30    }
31}
32
33impl From<TableIndentUnit> for TableIndent {
34    fn from(val: TableIndentUnit) -> Self {
35        TableIndent {
36            value: None,
37            unit: Some(val),
38        }
39    }
40}
41
42impl From<(isize, TableIndentUnit)> for TableIndent {
43    fn from(val: (isize, TableIndentUnit)) -> Self {
44        TableIndent {
45            value: Some(val.0),
46            unit: Some(val.1),
47        }
48    }
49}
50
51#[derive(Debug, Clone)]
52#[cfg_attr(test, derive(PartialEq))]
53pub enum TableIndentUnit {
54    Auto,
55    Dxa,
56    Nil,
57    Pct,
58}
59
60__string_enum! {
61    TableIndentUnit {
62        Auto = "auto",
63        Dxa = "dxa",
64        Nil = "nil",
65        Pct = "pct",
66    }
67}
68
69__xml_test_suites!(
70    TableIndent,
71    TableIndent::default(),
72    "<w:tblInd/>",
73    TableIndent::from(42),
74    r#"<w:tblInd w:w="42"/>"#,
75    TableIndent::from(TableIndentUnit::Pct),
76    r#"<w:tblInd w:type="pct"/>"#,
77    TableIndent::from((42, TableIndentUnit::Dxa)),
78    r#"<w:tblInd w:w="42" w:type="dxa"/>"#,
79);