From 32d3fa0eaea214c0c291ac6387cd4289b9cec69a Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Mon, 10 Feb 2020 22:21:11 -0500 Subject: Work on table presentation --- src/template.rs | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/template.rs b/src/template.rs index f3985e2..0ac67fb 100644 --- a/src/template.rs +++ b/src/template.rs @@ -246,28 +246,44 @@ mod function { mod table { use super::*; + #[derive(Debug, Serialize, Deserialize, Clone)] + pub struct TableRow { + pub index: i32, + pub columns: Vec, + } + #[derive(Debug, Serialize, Deserialize, Clone)] pub struct DisplayTable { - pub headings: Vec, - pub rows: Vec>, + pub num_rows: usize, + pub num_columns: usize, + pub headings: TableRow, + pub rows: Vec, } pub fn apply(columns: &Vec, d: &Json) -> Result { let rows = d .as_array() - .ok_or_else(|| Error::TemplateError("expected array".to_string(), d.clone()))?; + .ok_or_else(|| Error::TemplateError("expected array".to_string(), d.clone()))? + .iter() + .map(|d| { + columns + .iter() + .map(|c| function::eval(&c.field, d)) + .collect::, _>>() + }) + .collect::, _>>()?; Ok(DisplayTable { - headings: columns.iter().map(|c| c.display_name.clone()).collect(), - rows: rows - .iter() - .map(|d| { - columns - .iter() - .map(|c| function::eval(&c.field, d)) - .collect::, _>>() - }) - .collect::, _>>()?, + num_rows: rows.len(), + num_columns: columns.len(), + headings: TableRow { + index: 1, + columns: columns.iter().map(|c| json!(c.display_name)).collect(), + }, + rows: (2..).zip(rows.into_iter()).map(|(i, columns)| TableRow { + index: i, + columns: columns, + }).collect(), }) } } -- cgit v1.2.3