summaryrefslogtreecommitdiff
path: root/src/template.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/template.rs')
-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(),
})
}
}