use anyhow::bail; pub struct Recipe { template: String, } impl Recipe { const VARIABLES: [&'static str; 4] = ["URL", "SHA", "VERSION", "NEW_CHECK"]; pub fn new(template: String) -> Self { Recipe { template } } pub fn validate_listed(&self) -> anyhow::Result<()> { let missing_variables = Recipe::VARIABLES .iter() .filter(|&variable| !self.template.contains(variable)) .copied() .collect::>() .join(", "); if missing_variables.len() > 0 { bail!("Missing variables: {}.", missing_variables) } Ok(()) } pub fn validate_immediate(&self) -> anyhow::Result<()> { for variable in Recipe::VARIABLES { if !self.template.contains(variable) { bail!("Missing variable {}.", variable) } } Ok(()) } }