use crate::actions::ActionDeclaration; use crate::drivers::DriverDeclaration; use crate::generators::GeneratorDeclaration; use crate::utils; use anyhow::Context; use anyhow::Result; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; #[derive(Serialize, Deserialize, Default, Clone)] pub struct RootConfiguration { #[serde(default = "latest_version")] pub version: u32, #[serde(default)] pub values: BTreeMap, #[serde(default)] pub drivers: BTreeMap, #[serde(default)] pub actions: BTreeMap, #[serde(default)] pub entries: BTreeMap, #[serde(default)] pub generators: BTreeMap, #[serde(default)] pub phases: PhasesConfiguration, } #[derive(Serialize, Deserialize, Default, Clone)] pub struct EntryDeclaration { pub title: String, #[serde(default)] pub actions: Vec, #[serde(default)] pub values: BTreeMap, } #[derive(Serialize, Deserialize, Default, Clone)] pub struct PhasesConfiguration { #[serde(default)] pub startup: Vec, } #[derive(Serialize, Deserialize, Default, Clone)] pub struct PhaseConfiguration { #[serde(default)] pub actions: Vec, #[serde(default)] pub values: BTreeMap, } pub fn load() -> Result { let content = utils::read_file_contents("sprout.toml").context("unable to read sprout.toml file")?; let config: RootConfiguration = toml::from_slice(&content).context("unable to parse sprout.toml file")?; Ok(config) } pub fn latest_version() -> u32 { 1 }