mod provider;
pub use provider::RezConfigProvider;
use crate::core::{ConfigError, Result};
use std::path::PathBuf;
#[derive(Debug, Clone)]
pub struct Config {
pub packages_path: Vec<PathBuf>,
pub local_packages_path: Option<PathBuf>,
pub release_packages_path: Option<PathBuf>,
pub max_cache_size: usize,
pub cache_expiration_secs: u64,
pub debug_logging: bool,
}
impl Config {
pub fn new() -> Self {
Self {
packages_path: Vec::new(),
local_packages_path: None,
release_packages_path: None,
max_cache_size: 10000,
cache_expiration_secs: 3600, debug_logging: false,
}
}
pub fn validate(&self) -> Result<()> {
if self.packages_path.is_empty() {
return Err(ConfigError::NoValidPaths.into());
}
let mut valid_paths = 0;
for path in &self.packages_path {
if path.exists() && path.is_dir() {
valid_paths += 1;
}
}
if valid_paths == 0 {
return Err(ConfigError::NoValidPaths.into());
}
Ok(())
}
pub fn get_all_package_paths(&self) -> Vec<PathBuf> {
let mut all_paths = Vec::new();
if let Some(ref local_path) = self.local_packages_path {
all_paths.push(local_path.clone());
}
all_paths.extend(self.packages_path.iter().cloned());
if let Some(ref release_path) = self.release_packages_path {
all_paths.push(release_path.clone());
}
all_paths
}
}
impl Default for Config {
fn default() -> Self {
Self::new()
}
}