use crate::cache::TemplateSourceMatcher;
pub struct OrMatcher {
matchers: Vec<Box<dyn TemplateSourceMatcher>>,
}
impl OrMatcher {
pub fn new(matchers: Vec<Box<dyn TemplateSourceMatcher>>) -> Self {
if matchers.is_empty() {
panic!("Need at least 1 matcher, had 0.");
}
OrMatcher { matchers }
}
}
impl TemplateSourceMatcher for OrMatcher {
fn matches(&self, source_name: &str) -> bool {
for m in &self.matchers {
if m.matches(source_name) {
return true;
}
}
false
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::cache::FileExtensionMatcher;
#[test]
fn or_matches() {
let m = OrMatcher::new(vec![
Box::new(FileExtensionMatcher::new("ftl")),
Box::new(FileExtensionMatcher::new("ftlh")),
]);
assert!(m.matches("a.ftl"));
assert!(m.matches("a.ftlh"));
assert!(!m.matches("a.txt"));
}
}