mod resolver;
mod validate;
use crate::rule::Rule;
pub use resolver::ConfigResolver;
use serde::Deserialize;
use std::fs;
use std::path::Path;
pub(crate) use validate::warn_invalid_patterns;
#[derive(Debug, Deserialize, Default, Clone, PartialEq, Eq)]
pub struct Config {
#[serde(default)]
pub rules: Vec<Rule>,
#[serde(default)]
pub exclude: Vec<String>,
}
#[must_use]
pub fn load_config(path: &Path) -> Config {
let Ok(s) = fs::read_to_string(path) else {
return Config::default();
};
let cfg: Config = serde_yaml::from_str(&s).unwrap_or_else(|e| {
eprintln!("Warning: failed to parse config {}: {}", path.display(), e);
Config::default()
});
warn_invalid_patterns(&cfg, path);
cfg
}
#[cfg(test)]
#[path = "../config_tests.rs"]
mod tests;
#[cfg(test)]
#[path = "../config_tests_2.rs"]
mod tests2;