mdbook_plotly/code_handler/plot_obj_parser/
trace_registry.rs1use 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}