use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, enum2schema::Schema)]
pub enum ScriptSource {
Embedded { source: String },
File { path: String },
}
impl Default for ScriptSource {
fn default() -> Self {
ScriptSource::Embedded {
source: String::new(),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, enum2schema::Schema)]
pub struct Script {
pub source: ScriptSource,
#[serde(default = "default_enabled")]
pub enabled: bool,
}
fn default_enabled() -> bool {
true
}
impl Script {
pub fn from_source(source: impl Into<String>) -> Self {
Self {
source: ScriptSource::Embedded {
source: source.into(),
},
enabled: true,
}
}
pub fn source_text(&self) -> &str {
match &self.source {
ScriptSource::Embedded { source } => source,
ScriptSource::File { path } => path,
}
}
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize, enum2schema::Schema)]
pub struct GlobalScript {
pub name: String,
pub source: String,
#[serde(default = "default_enabled")]
pub enabled: bool,
}
impl GlobalScript {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: name.into(),
source: "fn on_tick() {\n}\n".to_string(),
enabled: true,
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GlobalScripts {
pub entries: Vec<GlobalScript>,
}