use serde::{Deserialize, Serialize};
use strum::{Display, EnumIter};
use ts_rs::TS;
#[derive(
Clone, Copy, Debug, Default, Deserialize, Display, EnumIter, Eq, PartialEq, Serialize, TS,
)]
pub enum ChartType {
#[default]
#[serde(rename = "bar")]
Bar,
#[serde(rename = "line")]
Line,
#[serde(rename = "scatter")]
Scatter,
#[serde(rename = "area")]
Area,
}
impl ChartType {
pub fn is_default(&self) -> bool {
*self == Self::Bar
}
pub fn supports_stack(&self) -> bool {
matches!(self, Self::Bar | Self::Area)
}
}
#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, TS)]
pub struct NumberSeriesStyleConfig {
#[serde(default)]
#[serde(skip_serializing_if = "ChartType::is_default")]
pub chart_type: ChartType,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub stack: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq)]
pub struct NumberSeriesStyleDefaultConfig {
pub chart_type: ChartType,
#[serde(default)]
pub stack: Option<bool>,
}