Skip to main content

mdbook_plotly/code_handler/plot_obj_parser/
table_parser.rs

1use super::until::must_translate_from_context;
2use crate::code_handler::parse_context::ParseContext;
3use crate::{translate_enum_with_config, translate_with_config};
4use anyhow::Result;
5use plotly::Trace;
6use plotly::traces::table::{Cells, Header, Table};
7
8pub fn parse_table_data(
9    table_obj: &mut serde_json::Value,
10    context: &ParseContext<'_>,
11) -> Result<Box<dyn Trace>> {
12    let header_values: Vec<Vec<String>> =
13        must_translate_from_context(table_obj, context, "header_values")?;
14    let cells_values: Vec<Vec<String>> =
15        must_translate_from_context(table_obj, context, "cells_values")?;
16    let header = Header::new(header_values);
17    let cells = Cells::new(cells_values);
18    let table = Table::new(header, cells);
19    let table = translate_with_config! {
20        table,
21        table_obj,
22        context.map(),
23        context.map_eval(),
24        (name, String),
25        (column_width, f64),
26        (column_order, Vec<usize>),
27    }?;
28
29    use plotly::common::Visible;
30    let table = translate_enum_with_config! {
31        table,
32        table_obj,
33        context.map(),
34        context.map_eval(),
35        (visible, {
36            "true" =>       Visible::True,
37            "false" =>      Visible::False,
38            "legendonly" => Visible::LegendOnly,
39        }),
40    }?;
41
42    Ok(table)
43}