Skip to main content

mdbook_plotly/code_handler/plot_obj_parser/
common.rs

1use super::until::Color;
2use crate::code_handler::parse_context::ParseContext;
3use crate::{translate_enum_with_config, translate_with_config};
4use anyhow::Result;
5use plotly::common::{ColorBar, Marker};
6
7pub fn parse_marker(
8    marker_obj: &mut serde_json::Value,
9    context: &ParseContext<'_>,
10) -> Result<Marker> {
11    let marker = translate_with_config! {
12        Marker::new(),
13        marker_obj,
14        context.map(),
15        context.map_eval(),
16        (color, Color),
17        (opacity, f64),
18        (size, usize),
19        (size_array, Vec<usize>),
20        (max_displayed, usize),
21        (size_ref, usize),
22        (size_min, usize),
23        (cauto, bool),
24        (cmax, f64),
25        (cmin, f64),
26        (cmid, f64),
27        (auto_color_scale, bool),
28        (reverse_scale, bool),
29        (show_scale, bool),
30        (outlier_color, Color)
31    }?;
32
33    use plotly::common::{MarkerSymbol, SizeMode};
34    translate_enum_with_config! {
35        marker,
36        marker_obj,
37        context.map(),
38        context.map_eval(),
39        (symbol, {
40            "circle" =>         MarkerSymbol::Circle,
41            "square" =>         MarkerSymbol::Square,
42            "diamond" =>        MarkerSymbol::Diamond,
43            "cross" =>          MarkerSymbol::Cross,
44            "x" =>              MarkerSymbol::X,
45            "triangle-up" =>    MarkerSymbol::TriangleUp,
46            "triangle-down" =>  MarkerSymbol::TriangleDown,
47            "triangle-left" =>  MarkerSymbol::TriangleLeft,
48            "triangle-right" => MarkerSymbol::TriangleRight,
49            "pentagon" =>       MarkerSymbol::Pentagon,
50            "hexagon" =>        MarkerSymbol::Hexagon,
51        }),
52        (size_mode, {
53            "area" => SizeMode::Area,
54            "diameter" => SizeMode::Diameter,
55        }),
56    }
57}
58
59pub fn parse_color_bar(
60    color_bar_obj: &mut serde_json::Value,
61    context: &ParseContext<'_>,
62) -> Result<ColorBar> {
63    translate_with_config! {
64        ColorBar::new(),
65        color_bar_obj,
66        context.map(),
67        context.map_eval(),
68        (thickness, usize),
69        (len, usize),
70        (x, f64),
71        (y, f64),
72        (title, String),
73    }
74}