mdbook_plotly/code_handler/plot_obj_parser/
scatter_mapbox_parser.rs1use super::common::parse_marker;
2use super::until::must_translate_from_context;
3use crate::code_handler::parse_context::ParseContext;
4use crate::{translate_enum_with_config, translate_with_config};
5use anyhow::Result;
6use plotly::{ScatterMapbox, Trace};
7
8pub fn parse_scatter_mapbox_data(
9 sm_obj: &mut serde_json::Value,
10 context: &ParseContext<'_>,
11) -> Result<Box<ScatterMapbox<f64, f64>>> {
12 let lat: Vec<f64> = must_translate_from_context(sm_obj, context, "lat")?;
13 let lon: Vec<f64> = must_translate_from_context(sm_obj, context, "lon")?;
14 let sm = ScatterMapbox::new(lat, lon);
15 let sm = translate_with_config! {
16 sm,
17 sm_obj,
18 context.map(),
19 context.map_eval(),
20 (ids, Vec<String>),
21 (selected_points, Vec<usize>),
22 (show_legend, bool),
23 (name, String),
24 (legend_group, String),
25 (legend_rank, usize),
26 (opacity, f64),
27 (text, String),
28 (text_array, Vec<String>),
29 (text_template, String),
30 (text_template_array, Vec<String>),
31 (hover_text, String),
32 (hover_text_array, Vec<String>),
33 (hover_template, String),
34 (hover_template_array, Vec<String>),
35 (subplot, String),
36 (below, String),
37 (meta, String),
38 }?;
39
40 use plotly::common::Mode;
41 let sm = translate_enum_with_config! {
42 sm,
43 sm_obj,
44 context.map(),
45 context.map_eval(),
46 (mode, {
47 "lines" => Mode::Lines,
48 "markers" => Mode::Markers,
49 "text" => Mode::Text,
50 "linesmarkers" => Mode::LinesMarkers,
51 "linestext" => Mode::LinesText,
52 "markerstext" => Mode::MarkersText,
53 "linemarkerstext" =>Mode::LinesMarkersText,
54 "none" => Mode::None,
55 }),
56 }?;
57
58 let sm = if let Some(marker_obj) = sm_obj.get_mut("marker")
59 && marker_obj.is_object()
60 {
61 let marker = parse_marker(marker_obj, context)?;
62 sm.marker(marker)
63 } else {
64 sm
65 };
66
67 Ok(sm)
68}
69
70pub fn parse_scatter_mapbox_trace(
71 sm_obj: &mut serde_json::Value,
72 context: &ParseContext<'_>,
73) -> Result<Box<dyn Trace>> {
74 Ok(parse_scatter_mapbox_data(sm_obj, context)?)
75}