1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#![allow(non_snake_case)]
#![doc = include_str!("../README.md")]

pub mod bar;
pub mod doughnut;
pub mod exports;
pub mod functions;
pub mod pie;
pub mod scatter;
pub mod traits;
pub mod types;

#[doc(hidden)]
mod utils;

use exports::get_chart;
use gloo_utils::format::JsValueSerdeExt;
use serde::{de::DeserializeOwned, Serialize};
pub use traits::*;
pub use types::*;
pub use utils::*;

pub trait ChartExt: DeserializeOwned + Serialize {
    fn get_id(self) -> String;

    fn into_chart(self) -> Chart {
        Chart {
            obj: <::wasm_bindgen::JsValue as JsValueSerdeExt>::from_serde(&self)
                .expect("Unable to serialize chart."),
            id: self.get_id(),
            mutate: false,
            plugins: String::new(),
        }
    }

    fn get_chart_from_id(id: &str) -> Option<Self> {
        let chart = get_chart(id);
        serde_wasm_bindgen::from_value(chart)
            .map_err(|e| {
                gloo_console::error!("{}", e.to_string());
                e
            })
            .ok()
    }
}