docx_reader/documents/elements/
table_row.rs1use 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}