use {
crate::*,
serde::Deserialize,
std::collections::HashMap,
};
#[derive(Debug, Clone, Deserialize)]
pub struct Maker {
pub name: Option<String>,
#[serde(default = "Pattern::default_task")]
pub task: Pattern,
pub queue: Pattern,
pub set: Option<Pattern>,
}
impl Maker {
pub fn make(
&self,
props: &HashMap<String, String>,
results: &mut Vec<RuleResult>,
) {
results.push(RuleResult {
task: self.task.inject(&props),
queue: self.queue.inject(&props),
set: self.set.as_ref().map(|pattern| pattern.inject(&props)),
});
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(untagged)]
pub enum Makers {
Single(Maker),
Multiple(Vec<Maker>),
}
impl Makers {
pub fn make(
&self,
props: &HashMap<String, String>,
results: &mut Vec<RuleResult>,
) {
match self {
Self::Single(maker) => {
maker.make(props, results);
}
Self::Multiple(vec) => {
for maker in vec {
maker.make(props, results);
}
}
}
}
}