docx_reader/documents/elements/
table_row.rs

1use serde::ser::{SerializeStruct, Serializer};
2use serde::Serialize;
3
4use super::{Delete, Insert, TableCell, TableRowProperty};
5use crate::HeightRule;
6
7#[derive(Debug, Clone, PartialEq, Serialize)]
8#[serde(rename_all = "camelCase")]
9pub struct TableRow {
10	pub cells: Vec<TableRowChild>,
11	pub has_numbering: bool,
12	pub property: TableRowProperty,
13}
14
15#[derive(Debug, Clone, PartialEq)]
16pub enum TableRowChild {
17	TableCell(TableCell),
18}
19
20impl TableRow {
21	pub fn new(cells: Vec<TableCell>) -> TableRow {
22		let property = TableRowProperty::new();
23		let has_numbering = cells.iter().any(|c| c.has_numbering);
24		let cells = cells.into_iter().map(TableRowChild::TableCell).collect();
25		Self {
26			cells,
27			property,
28			has_numbering,
29		}
30	}
31
32	pub fn grid_after(mut self, grid_after: u32) -> TableRow {
33		self.property = self.property.grid_after(grid_after);
34		self
35	}
36
37	pub fn width_after(mut self, w: f32) -> TableRow {
38		self.property = self.property.width_after(w);
39		self
40	}
41
42	pub fn grid_before(mut self, grid_before: u32) -> TableRow {
43		self.property = self.property.grid_before(grid_before);
44		self
45	}
46
47	pub fn width_before(mut self, w: f32) -> TableRow {
48		self.property = self.property.width_before(w);
49		self
50	}
51
52	pub fn row_height(mut self, h: f32) -> TableRow {
53		self.property = self.property.row_height(h);
54		self
55	}
56
57	pub fn height_rule(mut self, r: HeightRule) -> TableRow {
58		self.property = self.property.height_rule(r);
59		self
60	}
61
62	pub fn delete(mut self, d: Delete) -> TableRow {
63		self.property = self.property.delete(d);
64		self
65	}
66
67	pub fn insert(mut self, i: Insert) -> TableRow {
68		self.property = self.property.insert(i);
69		self
70	}
71}
72
73impl Serialize for TableRowChild {
74	fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
75	where
76		S: Serializer,
77	{
78		match *self {
79			TableRowChild::TableCell(ref r) => {
80				let mut t = serializer.serialize_struct("TableCell", 2)?;
81				t.serialize_field("type", "tableCell")?;
82				t.serialize_field("data", r)?;
83				t.end()
84			}
85		}
86	}
87}