pub mod color;
pub(crate) mod eval;
pub(crate) mod map;
pub mod parse_context;
pub mod plot_obj_parser;
pub mod until;
use crate::preprocessor::config::{MapEvalConfig, PlotlyInputType};
use anyhow::Result;
use plotly::Plot;
use serde_json::Value;
pub fn handle(
raw_code: String,
input_type: &PlotlyInputType,
map_eval: &MapEvalConfig,
) -> Result<Plot> {
let result = match input_type {
PlotlyInputType::JSONInput => handle_json_input(raw_code, map_eval)?,
PlotlyInputType::TOMLInput => handle_toml_input(raw_code, map_eval)?,
};
Ok(result)
}
pub fn handle_json_input(raw_code: String, map_eval: &MapEvalConfig) -> Result<Plot> {
let mut value: Value = json5::from_str(&raw_code)?;
plot_obj_parser::parse(&mut value, map_eval)
}
pub fn handle_toml_input(raw_code: String, map_eval: &MapEvalConfig) -> Result<Plot> {
let toml_value: toml::Value = toml::from_str(&raw_code)?;
let mut value = serde_json::to_value(toml_value)?;
plot_obj_parser::parse(&mut value, map_eval)
}