use serde::Deserialize;
pub(crate) const GENERATED_LAUNCHER: &str = "launch.mjs";
#[derive(Debug, Clone, Deserialize)]
#[serde(untagged)]
pub enum Launcher {
File(String),
Detailed {
file: String,
#[serde(default)]
bin: Option<String>,
},
Generated {
#[serde(default)]
bin: Option<String>,
#[serde(default)]
fail_open: bool,
},
}
impl Launcher {
pub fn output(&self) -> &str {
match self {
Self::File(file) => file,
Self::Detailed { file, .. } => file,
Self::Generated { .. } => GENERATED_LAUNCHER,
}
}
pub fn bin(&self) -> Option<&str> {
match self {
Self::File(_) => None,
Self::Detailed { bin, .. } | Self::Generated { bin, .. } => bin.as_deref(),
}
}
pub fn is_generated(&self) -> bool {
matches!(self, Self::Generated { .. })
}
pub fn fail_open(&self) -> bool {
matches!(
self,
Self::Generated {
fail_open: true,
..
}
)
}
}