docx_reader/documents/elements/
table_borders.rs1use serde::Serialize;
2
3use crate::types::*;
4
5#[derive(Serialize, Debug, Clone, PartialEq)]
18#[serde(rename_all = "camelCase")]
19pub struct TableBorder {
20 pub border_type: BorderType,
21 pub size: usize,
22 pub color: String,
23 position: TableBorderPosition,
24 space: usize,
25}
26
27impl TableBorder {
28 pub fn new(position: TableBorderPosition) -> TableBorder {
29 TableBorder {
30 position,
31 border_type: BorderType::Single,
32 size: 2,
33 space: 0,
34 color: "000000".to_owned(),
35 }
36 }
37
38 pub fn color(mut self, color: impl Into<String>) -> TableBorder {
39 self.color = color.into();
40 self
41 }
42
43 pub fn size(mut self, size: usize) -> TableBorder {
44 self.size = size;
45 self
46 }
47
48 pub fn border_type(mut self, border_type: BorderType) -> TableBorder {
49 self.border_type = border_type;
50 self
51 }
52}
53
54#[derive(Serialize, Debug, Clone, PartialEq)]
55#[serde(rename_all = "camelCase")]
56pub struct TableBorders {
57 top: Option<TableBorder>,
58 left: Option<TableBorder>,
59 bottom: Option<TableBorder>,
60 right: Option<TableBorder>,
61 inside_h: Option<TableBorder>,
62 inside_v: Option<TableBorder>,
63}
64
65impl Default for TableBorders {
66 fn default() -> TableBorders {
67 TableBorders {
68 top: Some(TableBorder::new(TableBorderPosition::Top)),
69 left: Some(TableBorder::new(TableBorderPosition::Left)),
70 bottom: Some(TableBorder::new(TableBorderPosition::Bottom)),
71 right: Some(TableBorder::new(TableBorderPosition::Right)),
72 inside_h: Some(TableBorder::new(TableBorderPosition::InsideH)),
73 inside_v: Some(TableBorder::new(TableBorderPosition::InsideV)),
74 }
75 }
76}
77
78impl TableBorders {
79 pub fn new() -> TableBorders {
80 Default::default()
81 }
82
83 pub fn with_empty() -> TableBorders {
84 TableBorders {
85 top: None,
86 left: None,
87 bottom: None,
88 right: None,
89 inside_h: None,
90 inside_v: None,
91 }
92 }
93
94 pub fn set(mut self, border: TableBorder) -> Self {
95 match border.position {
96 TableBorderPosition::Top => self.top = Some(border),
97 TableBorderPosition::Left => self.left = Some(border),
98 TableBorderPosition::Bottom => self.bottom = Some(border),
99 TableBorderPosition::Right => self.right = Some(border),
100 TableBorderPosition::InsideH => self.inside_h = Some(border),
101 TableBorderPosition::InsideV => self.inside_v = Some(border),
102 };
103 self
104 }
105
106 pub fn clear(mut self, position: TableBorderPosition) -> Self {
107 let nil = TableBorder::new(position.clone()).border_type(BorderType::Nil);
108 match position {
109 TableBorderPosition::Top => self.top = Some(nil),
110 TableBorderPosition::Left => self.left = Some(nil),
111 TableBorderPosition::Bottom => self.bottom = Some(nil),
112 TableBorderPosition::Right => self.right = Some(nil),
113 TableBorderPosition::InsideH => self.inside_h = Some(nil),
114 TableBorderPosition::InsideV => self.inside_v = Some(nil),
115 };
116 self
117 }
118
119 pub fn clear_all(mut self) -> Self {
120 self.top = Some(TableBorder::new(TableBorderPosition::Top).border_type(BorderType::Nil));
121 self.left = Some(TableBorder::new(TableBorderPosition::Left).border_type(BorderType::Nil));
122 self.bottom =
123 Some(TableBorder::new(TableBorderPosition::Bottom).border_type(BorderType::Nil));
124 self.right =
125 Some(TableBorder::new(TableBorderPosition::Right).border_type(BorderType::Nil));
126 self.inside_h =
127 Some(TableBorder::new(TableBorderPosition::InsideH).border_type(BorderType::Nil));
128 self.inside_v =
129 Some(TableBorder::new(TableBorderPosition::InsideV).border_type(BorderType::Nil));
130 self
131 }
132}