use serde::Serialize; use super::render_context::RenderContext; use super::table_group::RenderTableGroup; use crate::error::CustomError; use crate::intermediate::ITable; use crate::intermediate::ITableGroup; use super::macros::render; use super::table_row::RenderTableRow; #[derive(Debug, Serialize)] #[serde(tag = "type")] #[serde(rename = "table")] pub(crate) struct RenderTable { children: Vec, post_blank: organic::types::PostBlank, } render!(RenderTable, ITable, original, render_context, { let children = { let mut ret = Vec::new(); for group in original.children.iter() { let mut rows = Vec::new(); match group { ITableGroup::Head(irows) => { for obj in irows { rows.push(RenderTableRow::new(render_context.clone(), obj)?); } ret.push(RenderTableGroup::Head { children: rows }); } ITableGroup::Body(irows) => { for obj in irows { rows.push(RenderTableRow::new(render_context.clone(), obj)?); } ret.push(RenderTableGroup::Body { children: rows }); } } } ret }; Ok(RenderTable { children, post_blank: original.post_blank, }) });