summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2020-02-10 22:21:11 -0500
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2020-02-10 22:28:54 -0500
commit32d3fa0eaea214c0c291ac6387cd4289b9cec69a (patch)
treec39cca703d08dc337e90fd9f82be84210b129765 /src
parent76cecb24e5b959b9f8dc225d25a2b3319fb87890 (diff)
Work on table presentation
Diffstat (limited to 'src')
-rw-r--r--src/template.rs42
1 files changed, 29 insertions, 13 deletions
diff --git a/src/template.rs b/src/template.rs
index f3985e2..0ac67fb 100644
--- a/src/template.rs
+++ b/src/template.rs
@@ -247,27 +247,43 @@ mod table {
use super::*;
#[derive(Debug, Serialize, Deserialize, Clone)]
+ pub struct TableRow {
+ pub index: i32,
+ pub columns: Vec<Json>,
+ }
+
+ #[derive(Debug, Serialize, Deserialize, Clone)]
pub struct DisplayTable {
- pub headings: Vec<String>,
- pub rows: Vec<Vec<Json>>,
+ pub num_rows: usize,
+ pub num_columns: usize,
+ pub headings: TableRow,
+ pub rows: Vec<TableRow>,
}
pub fn apply(columns: &Vec<Column>, d: &Json) -> Result<DisplayTable, Error> {
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::<Result<Vec<_>, _>>()
+ })
+ .collect::<Result<Vec<_>, _>>()?;
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::<Result<Vec<_>, _>>()
- })
- .collect::<Result<Vec<_>, _>>()?,
+ 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(),
})
}
}