Skip to main content

mdbook_plotly/code_handler/plot_obj_parser/
trace_registry.rs

1use super::{
2    bar_parser, box_plot_parser, candlestick_parser, contour_parser, density_mapbox_parser,
3    heat_map_parser, histogram_parser, image_parser, mesh3d_parser, ohlc_parser, pie_parser,
4    sankey_parser, scatter_geo_parser, scatter_mapbox_parser, scatter_parser, scatter_polar_parser,
5    scatter3d_parser, surface_parser, table_parser,
6};
7use crate::code_handler::parse_context::ParseContext;
8use anyhow::{Result, anyhow};
9use plotly::Trace;
10use serde_json::Value;
11
12pub fn parse_data_obj(data_obj: &mut Value, context: &ParseContext<'_>) -> Result<Box<dyn Trace>> {
13    let data_type = data_obj
14        .get("type")
15        .and_then(|v| v.as_str())
16        .ok_or_else(|| anyhow!("`type` must be a string"))?;
17
18    match data_type {
19        "bar" => bar_parser::parse_bar_data(data_obj, context).map(|v| v as Box<dyn Trace>),
20        "box" => box_plot_parser::parse_box_plot_data(data_obj, context.map())
21            .map(|v| v as Box<dyn Trace>),
22        "candlestick" => candlestick_parser::parse_candlestick_data(data_obj, context.map())
23            .map(|v| v as Box<dyn Trace>),
24        "contour" => {
25            contour_parser::parse_contour_data(data_obj, context).map(|v| v as Box<dyn Trace>)
26        }
27        "density_mapbox" => {
28            density_mapbox_parser::parse_density_mapbox_data(data_obj, context.map())
29                .map(|v| v as Box<dyn Trace>)
30        }
31        "heatmap" => heat_map_parser::parse_heat_map_data(data_obj, context)
32            .map(|v| v as Box<dyn Trace>),
33        "histogram" => histogram_parser::parse_histogram_data(data_obj, context.map())
34            .map(|v| v as Box<dyn Trace>),
35        "ohlc" => {
36            ohlc_parser::parse_ohlc_data(data_obj, context.map()).map(|v| v as Box<dyn Trace>)
37        }
38        "image" => {
39            image_parser::parse_image_data(data_obj, context.map()).map(|v| v as Box<dyn Trace>)
40        }
41        "mesh3d" => mesh3d_parser::parse_mesh3d_data(data_obj, context.map()).map(|v| v as Box<dyn Trace>),
42        "pie" => pie_parser::parse_pie_data(data_obj, context.map()).map(|v| v as Box<dyn Trace>),
43        "sankey" => {
44            sankey_parser::parse_sankey_data(data_obj, context.map()).map(|v| v as Box<dyn Trace>)
45        }
46        "scatter" => {
47            scatter_parser::parse_scatter_data(data_obj, context).map(|v| v as Box<dyn Trace>)
48        }
49        "scatter3d" => scatter3d_parser::parse_scatter3d_data(data_obj, context.map())
50            .map(|v| v as Box<dyn Trace>),
51        "scatter_geo" => scatter_geo_parser::parse_scatter_geo_data(data_obj, context.map())
52            .map(|v| v as Box<dyn Trace>),
53        "scatter_mapbox" => {
54            scatter_mapbox_parser::parse_scatter_mapbox_data(data_obj, context.map())
55                .map(|v| v as Box<dyn Trace>)
56        }
57        "scatter_polar" => scatter_polar_parser::parse_scatter_polar_data(data_obj, context.map())
58            .map(|v| v as Box<dyn Trace>),
59        "surface" => surface_parser::parse_surface_data(data_obj, context).map(|v| v as Box<dyn Trace>),
60        "table" => {
61            table_parser::parse_table_data(data_obj, context.map()).map(|v| v as Box<dyn Trace>)
62        }
63        unexpected => Err(anyhow!("{} isn't a type in data", unexpected)),
64    }
65}