use std::path::PathBuf;
use walkdir::WalkDir;
#[derive(serde::Deserialize, serde::Serialize)]
pub(crate) struct Processor {
pub path: PathBuf,
#[serde(default)]
pub depth: usize,
pub command: String,
pub args: Vec<String>,
#[serde(default)]
pub debounce: u64,
#[serde(default)]
pub keep_file: bool,
}
#[derive(serde::Deserialize, serde::Serialize, Default)]
pub(crate) struct Config {
pub processors: Vec<Processor>,
}
impl Processor {
pub fn paths(&self) -> impl Iterator<Item = PathBuf> {
WalkDir::new(&self.path)
.max_depth(self.depth)
.into_iter()
.filter_entry(|e| e.file_type().is_dir())
.filter_map(|e| e.ok().map(|e| e.path().to_owned()))
}
}
pub(crate) fn load() -> Result<Config, confy::ConfyError> {
println!(
"Parsing {}",
confy::get_configuration_file_path("nfp", "nfp")?.display()
);
confy::load::<Config>("nfp", "nfp")
}