fix: tableRow and cell json type (#418)
parent
515812ffc8
commit
c036c0e6a1
|
@ -1,3 +1,4 @@
|
||||||
|
use serde::ser::{SerializeStruct, Serializer};
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
@ -8,17 +9,31 @@ use crate::xml_builder::*;
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct Table {
|
pub struct Table {
|
||||||
pub rows: Vec<TableRow>,
|
pub rows: Vec<TableChild>,
|
||||||
pub grid: Vec<usize>,
|
pub grid: Vec<usize>,
|
||||||
pub has_numbering: bool,
|
pub has_numbering: bool,
|
||||||
pub property: TableProperty,
|
pub property: TableProperty,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
|
pub enum TableChild {
|
||||||
|
TableRow(TableRow),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BuildXML for TableChild {
|
||||||
|
fn build(&self) -> Vec<u8> {
|
||||||
|
match self {
|
||||||
|
TableChild::TableRow(v) => v.build(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Table {
|
impl Table {
|
||||||
pub fn new(rows: Vec<TableRow>) -> Table {
|
pub fn new(rows: Vec<TableRow>) -> Table {
|
||||||
let property = TableProperty::new();
|
let property = TableProperty::new();
|
||||||
let has_numbering = rows.iter().any(|c| c.has_numbering);
|
let has_numbering = rows.iter().any(|c| c.has_numbering);
|
||||||
let grid = vec![];
|
let grid = vec![];
|
||||||
|
let rows = rows.into_iter().map(TableChild::TableRow).collect();
|
||||||
Self {
|
Self {
|
||||||
property,
|
property,
|
||||||
rows,
|
rows,
|
||||||
|
@ -31,6 +46,7 @@ impl Table {
|
||||||
let property = TableProperty::without_borders();
|
let property = TableProperty::without_borders();
|
||||||
let has_numbering = rows.iter().any(|c| c.has_numbering);
|
let has_numbering = rows.iter().any(|c| c.has_numbering);
|
||||||
let grid = vec![];
|
let grid = vec![];
|
||||||
|
let rows = rows.into_iter().map(TableChild::TableRow).collect();
|
||||||
Self {
|
Self {
|
||||||
property,
|
property,
|
||||||
rows,
|
rows,
|
||||||
|
@ -40,7 +56,7 @@ impl Table {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_row(mut self, row: TableRow) -> Table {
|
pub fn add_row(mut self, row: TableRow) -> Table {
|
||||||
self.rows.push(row);
|
self.rows.push(TableChild::TableRow(row));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,6 +128,22 @@ impl BuildXML for Table {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Serialize for TableChild {
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
match *self {
|
||||||
|
TableChild::TableRow(ref r) => {
|
||||||
|
let mut t = serializer.serialize_struct("TableRow", 2)?;
|
||||||
|
t.serialize_field("type", "tableRow")?;
|
||||||
|
t.serialize_field("data", r)?;
|
||||||
|
t.end()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use serde::ser::{SerializeStruct, Serializer};
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use super::{TableCell, TableRowProperty};
|
use super::{TableCell, TableRowProperty};
|
||||||
|
@ -7,15 +8,29 @@ use crate::{documents::BuildXML, HeightRule};
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct TableRow {
|
pub struct TableRow {
|
||||||
pub cells: Vec<TableCell>,
|
pub cells: Vec<TableRowChild>,
|
||||||
pub has_numbering: bool,
|
pub has_numbering: bool,
|
||||||
pub property: TableRowProperty,
|
pub property: TableRowProperty,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
|
pub enum TableRowChild {
|
||||||
|
TableCell(TableCell),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BuildXML for TableRowChild {
|
||||||
|
fn build(&self) -> Vec<u8> {
|
||||||
|
match self {
|
||||||
|
TableRowChild::TableCell(v) => v.build(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl TableRow {
|
impl TableRow {
|
||||||
pub fn new(cells: Vec<TableCell>) -> TableRow {
|
pub fn new(cells: Vec<TableCell>) -> TableRow {
|
||||||
let property = TableRowProperty::new();
|
let property = TableRowProperty::new();
|
||||||
let has_numbering = cells.iter().any(|c| c.has_numbering);
|
let has_numbering = cells.iter().any(|c| c.has_numbering);
|
||||||
|
let cells = cells.into_iter().map(TableRowChild::TableCell).collect();
|
||||||
Self {
|
Self {
|
||||||
cells,
|
cells,
|
||||||
property,
|
property,
|
||||||
|
@ -64,6 +79,22 @@ impl BuildXML for TableRow {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Serialize for TableRowChild {
|
||||||
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
where
|
||||||
|
S: Serializer,
|
||||||
|
{
|
||||||
|
match *self {
|
||||||
|
TableRowChild::TableCell(ref r) => {
|
||||||
|
let mut t = serializer.serialize_struct("TableCell", 2)?;
|
||||||
|
t.serialize_field("type", "tableCell")?;
|
||||||
|
t.serialize_field("data", r)?;
|
||||||
|
t.end()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
||||||
|
@ -86,7 +117,7 @@ mod tests {
|
||||||
let r = TableRow::new(vec![TableCell::new()]);
|
let r = TableRow::new(vec![TableCell::new()]);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
serde_json::to_string(&r).unwrap(),
|
serde_json::to_string(&r).unwrap(),
|
||||||
r#"{"cells":[{"children":[],"property":{"width":null,"borders":null,"gridSpan":null,"verticalMerge":null,"verticalAlign":null,"textDirection":null,"shading":null},"hasNumbering":false}],"hasNumbering":false,"property":{"gridAfter":null,"widthAfter":null,"gridBefore":null,"widthBefore":null,"rowHeight":null,"heightRule":null}}"#
|
r#"{"cells":[{"type":"tableCell","data":{"children":[],"property":{"width":null,"borders":null,"gridSpan":null,"verticalMerge":null,"verticalAlign":null,"textDirection":null,"shading":null},"hasNumbering":false}}],"hasNumbering":false,"property":{"gridAfter":null,"widthAfter":null,"gridBefore":null,"widthBefore":null,"rowHeight":null,"heightRule":null}}"#
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -586,8 +586,8 @@ impl Docx {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DocumentChild::Table(table) => {
|
DocumentChild::Table(table) => {
|
||||||
for row in &table.rows {
|
for TableChild::TableRow(row) in &table.rows {
|
||||||
for cell in &row.cells {
|
for TableRowChild::TableCell(cell) in &row.cells {
|
||||||
for content in &cell.children {
|
for content in &cell.children {
|
||||||
match content {
|
match content {
|
||||||
TableCellContent::Paragraph(paragraph) => {
|
TableCellContent::Paragraph(paragraph) => {
|
||||||
|
@ -646,8 +646,8 @@ impl Docx {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DocumentChild::Table(table) => {
|
DocumentChild::Table(table) => {
|
||||||
for row in &table.rows {
|
for TableChild::TableRow(row) in &table.rows {
|
||||||
for cell in &row.cells {
|
for TableRowChild::TableCell(cell) in &row.cells {
|
||||||
for content in &cell.children {
|
for content in &cell.children {
|
||||||
match content {
|
match content {
|
||||||
TableCellContent::Paragraph(paragraph) => {
|
TableCellContent::Paragraph(paragraph) => {
|
||||||
|
@ -739,8 +739,8 @@ impl Docx {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DocumentChild::Table(table) => {
|
DocumentChild::Table(table) => {
|
||||||
for row in &mut table.rows {
|
for TableChild::TableRow(row) in &mut table.rows {
|
||||||
for cell in &mut row.cells {
|
for TableRowChild::TableCell(cell) in &mut row.cells {
|
||||||
for content in &mut cell.children {
|
for content in &mut cell.children {
|
||||||
match content {
|
match content {
|
||||||
TableCellContent::Paragraph(paragraph) => {
|
TableCellContent::Paragraph(paragraph) => {
|
||||||
|
@ -828,8 +828,8 @@ impl Docx {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DocumentChild::Table(table) => {
|
DocumentChild::Table(table) => {
|
||||||
for row in &mut table.rows {
|
for TableChild::TableRow(row) in &mut table.rows {
|
||||||
for cell in &mut row.cells {
|
for TableRowChild::TableCell(cell) in &mut row.cells {
|
||||||
for content in &mut cell.children {
|
for content in &mut cell.children {
|
||||||
match content {
|
match content {
|
||||||
TableCellContent::Paragraph(paragraph) => {
|
TableCellContent::Paragraph(paragraph) => {
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -36,13 +36,19 @@ export type TableRowPropertyJSON = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export type TableCellJSON = {
|
export type TableCellJSON = {
|
||||||
children: TableCellChildJSON[];
|
type: "tableCell";
|
||||||
property: TableCellPropertyJSON;
|
data: {
|
||||||
|
children: TableCellChildJSON[];
|
||||||
|
property: TableCellPropertyJSON;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export type TableRowJSON = {
|
export type TableRowJSON = {
|
||||||
cells: TableCellJSON[];
|
type: "tableRow";
|
||||||
property: TableRowPropertyJSON;
|
data: {
|
||||||
|
cells: TableCellJSON[];
|
||||||
|
property: TableRowPropertyJSON;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export type TableCellMarginJSON = { val: number; widthType: WidthType };
|
export type TableCellMarginJSON = { val: number; widthType: WidthType };
|
||||||
|
|
|
@ -20,7 +20,7 @@ impl Table {
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
impl Table {
|
impl Table {
|
||||||
pub fn add_row(mut self, row: TableRow) -> Table {
|
pub fn add_row(mut self, row: TableRow) -> Table {
|
||||||
self.0.rows.push(row.take());
|
self.0.rows.push(docx_rs::TableChild::TableRow(row.take()));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ impl TableRow {
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
impl TableRow {
|
impl TableRow {
|
||||||
pub fn add_cell(mut self, cell: TableCell) -> TableRow {
|
pub fn add_cell(mut self, cell: TableCell) -> TableRow {
|
||||||
self.0.cells.push(cell.take());
|
self.0.cells.push(docx_rs::TableRowChild::TableCell(cell.take()));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue