use anyhow::{Context, Result}; use serde::Deserialize; const EMBEDDED: &str = include_str!("../data/roles.toml"); #[derive(Debug, Clone, Deserialize)] pub struct Role { pub name: String, pub description: String, pub tool: String, pub packages: Vec, pub config_paths: Vec, } #[derive(Debug, Deserialize)] struct Registry { role: Vec, } pub fn load() -> Result> { let reg: Registry = toml::from_str(EMBEDDED).context("parse embedded roles.toml")?; Ok(reg.role) } pub fn find<'a>(roles: &'a [Role], name: &str) -> Option<&'a Role> { roles.iter().find(|r| r.name == name) }