use std::path::{Path, PathBuf};
pub mod pattern;
pub trait Pattern: Clone + PartialEq + Eq + std::fmt::Debug + std::hash::Hash + Ord + PartialOrd + Default {
type Value: PartialEq + Eq + std::fmt::Debug + std::hash::Hash + Ord + PartialOrd + Clone;
fn bytes_to_patterns(&self, bytes: &[u8], source: &Path) -> Vec<pattern::Mapping<Self::Value>>;
}
pub fn add_patterns_file<T: Pattern>(
patterns: &mut Vec<pattern::List<T>>,
source: PathBuf,
follow_symlinks: bool,
root: Option<&Path>,
buf: &mut Vec<u8>,
parse: T,
) -> std::io::Result<bool> {
let previous_len = patterns.len();
patterns.extend(pattern::List::<T>::from_file(
source,
root,
follow_symlinks,
buf,
parse,
)?);
Ok(patterns.len() != previous_len)
}