Files
sprout/src/actions.rs

50 lines
1.4 KiB
Rust
Raw Normal View History

use crate::context::SproutContext;
use anyhow::{Result, bail};
use serde::{Deserialize, Serialize};
use std::rc::Rc;
pub mod chainload;
pub mod edera;
2025-10-05 00:09:53 -07:00
pub mod print;
2025-10-05 03:12:00 -07:00
#[cfg(feature = "splash")]
pub mod splash;
#[derive(Serialize, Deserialize, Default, Clone)]
pub struct ActionDeclaration {
#[serde(default)]
pub chainload: Option<chainload::ChainloadConfiguration>,
#[serde(default)]
pub print: Option<print::PrintConfiguration>,
#[serde(default)]
#[cfg(feature = "splash")]
pub splash: Option<splash::SplashConfiguration>,
#[serde(default, rename = "edera")]
pub edera: Option<edera::EderaConfiguration>,
}
pub fn execute(context: Rc<SproutContext>, name: impl AsRef<str>) -> Result<()> {
2025-10-05 00:09:53 -07:00
let Some(action) = context.root().actions().get(name.as_ref()) else {
bail!("unknown action '{}'", name.as_ref());
2025-10-05 00:09:53 -07:00
};
let context = context.finalize().freeze();
if let Some(chainload) = &action.chainload {
chainload::chainload(context.clone(), chainload)?;
return Ok(());
2025-10-05 00:09:53 -07:00
} else if let Some(print) = &action.print {
print::print(context.clone(), print)?;
return Ok(());
} else if let Some(edera) = &action.edera {
edera::edera(context.clone(), edera)?;
2025-10-05 03:12:00 -07:00
}
#[cfg(feature = "splash")]
if let Some(splash) = &action.splash {
splash::splash(context.clone(), splash)?;
return Ok(());
}
2025-10-05 03:12:00 -07:00
bail!("unknown action configuration");
}