use std::collections::HashSet;
use super::{Action, Arch, ArgCmp, Rule};
#[derive(Clone, Debug)]
pub struct Filter {
pub(crate) default_action: Action,
pub(crate) architectures: HashSet<Arch>,
pub(crate) rules: Vec<Rule>,
}
impl Filter {
pub fn new(default_action: Action) -> Self {
Self {
default_action,
architectures: HashSet::new(),
rules: vec![],
}
}
pub fn add_arch(&mut self, arch: Arch) -> &mut Self {
self.architectures.insert(arch);
self
}
pub fn add_rule(&mut self, action: Action, syscall: &str) -> &mut Self {
let sysname = syscall.to_string();
let argcmps = vec![];
self.rules.push(Rule {
action,
sysname,
argcmps,
});
self
}
pub fn add_rule_conditional(
&mut self,
action: Action,
syscall: &str,
argcmps: &[ArgCmp],
) -> &mut Self {
let sysname = syscall.to_string();
let argcmps = argcmps.to_vec();
self.rules.push(Rule {
action,
sysname,
argcmps,
});
self
}
#[doc(hidden)]
pub fn get_rules(&self) -> Vec<Rule> {
self.rules.clone()
}
}