use crate::{
datatype::CompositeValue,
element::{Color, Label, Symbol},
};
use charming_macros::CharmingSetters;
use serde::{Deserialize, Serialize};
#[serde_with::apply(
Option => #[serde(skip_serializing_if = "Option::is_none")],
Vec => #[serde(default, skip_serializing_if = "Vec::is_empty")]
)]
#[derive(Serialize, Deserialize, CharmingSetters, Debug, PartialEq, Clone)]
#[serde(rename_all = "camelCase")]
pub struct DecalItem {
symbol: Option<Symbol>,
symbol_size: Option<f64>,
symbol_keep_aspect: Option<bool>,
color: Option<Color>,
background_color: Option<Color>,
dash_array_x: Option<CompositeValue>,
dash_array_y: Option<CompositeValue>,
rotation: Option<f64>,
max_tile_width: Option<f64>,
max_tile_height: Option<f64>,
}
#[derive(Serialize, Deserialize, CharmingSetters, Debug, PartialEq, Clone)]
#[serde(rename_all = "camelCase")]
#[serde_with::apply(
Option => #[serde(skip_serializing_if = "Option::is_none")],
Vec => #[serde(default, skip_serializing_if = "Vec::is_empty")]
)]
pub struct Decal {
show: Option<bool>,
#[charming_set_vec]
decals: Vec<DecalItem>,
}
#[derive(Serialize, Deserialize, CharmingSetters, Debug, PartialEq, Clone)]
#[serde(rename_all = "camelCase")]
#[serde_with::apply(
Option => #[serde(skip_serializing_if = "Option::is_none")],
Vec => #[serde(default, skip_serializing_if = "Vec::is_empty")]
)]
pub struct Aria {
enabled: Option<bool>,
label: Option<Label>,
decal: Option<Decal>,
}