use globset::{Glob, GlobSet, GlobSetBuilder};
use std::{collections::HashSet, path::PathBuf};
#[derive(Clone)]
pub struct IgnoreSet {
pub dir: PathBuf,
hashset: HashSet<String>,
globset: GlobSet,
}
impl IgnoreSet {
pub fn new(dir: &PathBuf) -> Self {
Self {
dir: dir.clone(),
hashset: HashSet::new(),
globset: GlobSet::empty(),
}
}
pub fn insert(&mut self, value: &str) {
self.hashset.insert(value.to_string());
}
pub fn replace(&mut self, ignoreset: IgnoreSet) {
self.hashset = ignoreset.hashset;
self.globset = ignoreset.globset;
}
pub fn compile(&mut self) {
let mut globset_builder = GlobSetBuilder::new();
self.hashset.iter().for_each(|item| {
globset_builder.add(Glob::new(item).unwrap());
});
self.globset = globset_builder.build().unwrap();
}
pub fn is_matched(&self, value: &str) -> bool {
self.globset.is_match(value)
}
}