use crate::{ConfigEntry, ConfigFile};
use std::env;
use std::path::PathBuf;
use strut_core::Pivot;
pub mod dir;
pub mod entry;
pub mod file;
pub struct Scanner;
impl Scanner {
pub fn find_config_files(dir_name: Option<&str>) -> Vec<ConfigFile> {
let config_dir = Self::resolve_config_dir(dir_name);
let mut config_files = ConfigEntry::dir(config_dir) .cd() .flat_map(ConfigEntry::cd_capturing_profile) .filter(ConfigEntry::applies_to_active_profile) .filter_map(ConfigEntry::to_config_file) .collect::<Vec<_>>();
config_files.sort();
config_files
}
fn resolve_config_dir(path: Option<&str>) -> PathBuf {
let input_path = env::var("APP_CONFIG_DIR") .map(PathBuf::from)
.ok()
.or_else(|| {
path.map(str::trim) .filter(|s| !s.is_empty())
.map(PathBuf::from)
})
.unwrap_or(PathBuf::from("config"));
if input_path.is_absolute() {
input_path
} else {
Pivot::resolve().join(input_path)
}
}
}