use crate::{Diagnostic, diagnostic, validator};
use std::path::Path;
pub trait AdditionalValidator: Send + Sync {
fn validate(&self, repository: &Path) -> Vec<Diagnostic>;
}
impl<F> AdditionalValidator for F
where
F: Fn(&Path) -> Vec<Diagnostic> + Send + Sync,
{
fn validate(&self, repository: &Path) -> Vec<Diagnostic> {
self(repository)
}
}
pub fn validate_repository_with<'a>(root: impl AsRef<Path>, validators: impl IntoIterator<Item = &'a dyn AdditionalValidator>) -> Vec<Diagnostic> {
let root = root.as_ref();
let mut diagnostics = validator::validate_repository(root);
for validator in validators {
diagnostics.extend(validator.validate(root));
}
diagnostic::sort_diagnostics(&mut diagnostics);
diagnostics
}