#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct RuleSelection {
selected: Vec<String>,
skipped: Vec<String>,
}
impl RuleSelection {
pub fn new(selected: Vec<String>, skipped: Vec<String>) -> Self {
Self { selected, skipped }
}
pub fn includes(&self, name: &str) -> bool {
if self.skipped.iter().any(|skipped| skipped == name) {
return false;
}
self.selected.is_empty() || self.selected.iter().any(|selected| selected == name)
}
pub fn selects_explicitly(&self, name: &str) -> bool {
self.selected.iter().any(|selected| selected == name)
}
pub fn unknown_in(&self, known: &[&str]) -> Vec<String> {
self.selected
.iter()
.chain(self.skipped.iter())
.filter(|name| !known.contains(&name.as_str()))
.cloned()
.collect()
}
}