use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
pub type ColorString = String;
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(untagged)]
pub enum ScalarOrArray<T> {
One(T),
Many(Vec<T>),
}
#[derive(Serialize, Deserialize, JsonSchema, Default)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ThemeOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub palette: Option<Vec<ColorString>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub grid_color: Option<ColorString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text_color: Option<ColorString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub background_color: Option<ColorString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub font_size: Option<f64>,
}
#[derive(Serialize, Deserialize, JsonSchema, Default)]
#[serde(deny_unknown_fields)]
pub struct TitlePlugin {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
}
#[derive(Serialize, Deserialize, JsonSchema, Default)]
#[serde(deny_unknown_fields)]
pub struct LegendPlugin {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub position: Option<LegendPosition>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum LegendPosition {
Top,
Bottom,
Left,
Right,
}
#[derive(Serialize, Deserialize, JsonSchema, Default)]
#[serde(deny_unknown_fields)]
pub struct DataLabelsPlugin {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display: Option<bool>,
}
#[derive(Serialize, Deserialize, JsonSchema, Default)]
#[serde(deny_unknown_fields)]
pub struct DecimationPlugin {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub algorithm: Option<DecimationAlgorithmName>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub samples: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub threshold: Option<f64>,
}
#[derive(Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "kebab-case")]
pub enum DecimationAlgorithmName {
MinMax,
Lttb,
}
#[derive(Serialize, Deserialize, JsonSchema, Default)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct AxisOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub stacked: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub grid: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub begin_at_zero: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub suggested_min: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub suggested_max: Option<f64>,
}