docx_reader/documents/elements/
table_cell_borders.rs1use serde::Serialize;
2
3use crate::types::*;
4
5#[derive(Serialize, Debug, Clone, PartialEq)]
18#[serde(rename_all = "camelCase")]
19pub struct TableCellBorder {
20 pub border_type: BorderType,
21 pub size: usize,
22 pub color: String,
23 position: TableCellBorderPosition,
24 space: usize,
25}
26
27impl TableCellBorder {
28 pub fn new(position: TableCellBorderPosition) -> TableCellBorder {
29 TableCellBorder {
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>) -> TableCellBorder {
39 self.color = color.into();
40 self
41 }
42
43 pub fn size(mut self, size: usize) -> TableCellBorder {
44 self.size = size;
45 self
46 }
47
48 pub fn border_type(mut self, border_type: BorderType) -> TableCellBorder {
49 self.border_type = border_type;
50 self
51 }
52
53 pub fn get_size(&self) -> usize {
54 self.size
55 }
56
57 pub fn get_color(&self) -> String {
58 self.color.clone()
59 }
60
61 pub fn get_border_type(&self) -> BorderType {
62 self.border_type
63 }
64}
65
66#[derive(Serialize, Debug, Clone, PartialEq)]
67#[serde(rename_all = "camelCase")]
68pub struct TableCellBorders {
69 top: Option<TableCellBorder>,
70 left: Option<TableCellBorder>,
71 bottom: Option<TableCellBorder>,
72 right: Option<TableCellBorder>,
73 inside_h: Option<TableCellBorder>,
74 inside_v: Option<TableCellBorder>,
75 tr2bl: Option<TableCellBorder>,
76 tl2br: Option<TableCellBorder>,
77}
78
79impl Default for TableCellBorders {
80 fn default() -> TableCellBorders {
81 TableCellBorders {
82 top: Some(TableCellBorder::new(TableCellBorderPosition::Top)),
83 left: Some(TableCellBorder::new(TableCellBorderPosition::Left)),
84 bottom: Some(TableCellBorder::new(TableCellBorderPosition::Bottom)),
85 right: Some(TableCellBorder::new(TableCellBorderPosition::Right)),
86 inside_h: Some(TableCellBorder::new(TableCellBorderPosition::InsideH)),
87 inside_v: Some(TableCellBorder::new(TableCellBorderPosition::InsideV)),
88 tr2bl: None,
89 tl2br: None,
90 }
91 }
92}
93
94impl TableCellBorders {
95 pub fn new() -> TableCellBorders {
96 Default::default()
97 }
98
99 pub fn with_empty() -> TableCellBorders {
100 TableCellBorders {
101 top: None,
102 left: None,
103 bottom: None,
104 right: None,
105 inside_h: None,
106 inside_v: None,
107 tr2bl: None,
108 tl2br: None,
109 }
110 }
111
112 pub fn set(mut self, border: TableCellBorder) -> Self {
113 match border.position {
114 TableCellBorderPosition::Top => self.top = Some(border),
115 TableCellBorderPosition::Left => self.left = Some(border),
116 TableCellBorderPosition::Bottom => self.bottom = Some(border),
117 TableCellBorderPosition::Right => self.right = Some(border),
118 TableCellBorderPosition::InsideH => self.inside_h = Some(border),
119 TableCellBorderPosition::InsideV => self.inside_v = Some(border),
120 TableCellBorderPosition::Tr2bl => self.tr2bl = Some(border),
121 TableCellBorderPosition::Tl2br => self.tl2br = Some(border),
122 };
123 self
124 }
125
126 pub fn clear(mut self, position: TableCellBorderPosition) -> Self {
127 let nil = TableCellBorder::new(position.clone()).border_type(BorderType::Nil);
128 match position {
129 TableCellBorderPosition::Top => self.top = Some(nil),
130 TableCellBorderPosition::Left => self.left = Some(nil),
131 TableCellBorderPosition::Bottom => self.bottom = Some(nil),
132 TableCellBorderPosition::Right => self.right = Some(nil),
133 TableCellBorderPosition::InsideH => self.inside_h = Some(nil),
134 TableCellBorderPosition::InsideV => self.inside_v = Some(nil),
135 TableCellBorderPosition::Tr2bl => self.tr2bl = Some(nil),
136 TableCellBorderPosition::Tl2br => self.tl2br = Some(nil),
137 };
138 self
139 }
140
141 pub fn clear_all(mut self) -> Self {
142 self.top =
143 Some(TableCellBorder::new(TableCellBorderPosition::Top).border_type(BorderType::Nil));
144 self.left =
145 Some(TableCellBorder::new(TableCellBorderPosition::Left).border_type(BorderType::Nil));
146 self.bottom = Some(
147 TableCellBorder::new(TableCellBorderPosition::Bottom).border_type(BorderType::Nil),
148 );
149 self.right =
150 Some(TableCellBorder::new(TableCellBorderPosition::Right).border_type(BorderType::Nil));
151 self.inside_h = Some(
152 TableCellBorder::new(TableCellBorderPosition::InsideH).border_type(BorderType::Nil),
153 );
154 self.inside_v = Some(
155 TableCellBorder::new(TableCellBorderPosition::InsideV).border_type(BorderType::Nil),
156 );
157 self.tl2br =
158 Some(TableCellBorder::new(TableCellBorderPosition::Tl2br).border_type(BorderType::Nil));
159 self.tr2bl =
160 Some(TableCellBorder::new(TableCellBorderPosition::Tr2bl).border_type(BorderType::Nil));
161 self
162 }
163}