use nitro_shared::Side;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Clone)]
pub struct Control {
pub id: String,
pub name: String,
pub schema: ControlSchema,
#[serde(default)]
pub default: Option<serde_json::Value>,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub color: Option<String>,
#[serde(default)]
pub section: Option<String>,
#[serde(default)]
pub always_serialize: bool,
#[serde(default)]
pub side: Option<Side>,
}
#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "snake_case")]
#[serde(tag = "type")]
pub enum ControlSchema {
Boolean,
Choice {
variants: Vec<Variant>,
#[serde(default)]
dropdown: bool,
#[serde(default)]
multiple: bool,
},
String {
#[serde(default)]
lowercase: bool,
},
Path,
Number {
min: Option<f32>,
max: Option<f32>,
step: f32,
#[serde(default)]
slider: bool,
},
StringList,
List {
fields: Vec<Control>,
#[serde(default)]
is_map: bool,
},
Json,
Keybind,
}
#[derive(Serialize, Deserialize, Clone)]
pub struct Variant {
pub id: Option<String>,
pub name: String,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub color: Option<String>,
}