use crate::error::DevbrainError;
use std::env;
use std::path::PathBuf;
pub const DEFAULT_DB_PATH: &str = "~/.devbrain/db.json";
pub const DEFAULT_PRESETS_PATH: &str = "~/.devbrain/presets.json";
#[derive(Clone)]
pub struct Config {
pub db_path: PathBuf,
pub presets_path: PathBuf,
}
pub fn load_config() -> Result<Config, DevbrainError> {
if let Ok(path) = env::var("DEVBRAIN_DB_PATH") {
let db_path = PathBuf::from(path);
let presets_path = db_path
.parent()
.map(|parent| parent.join("presets.json"))
.unwrap_or_else(|| PathBuf::from(DEFAULT_PRESETS_PATH));
return Ok(Config {
db_path,
presets_path,
});
}
let home = env::var_os("HOME")
.map(PathBuf::from)
.ok_or_else(|| DevbrainError::Other("HOME directory not found".to_string()))?;
let db_path = if let Some(stripped) = DEFAULT_DB_PATH.strip_prefix("~/") {
home.join(stripped)
} else {
PathBuf::from(DEFAULT_DB_PATH)
};
let presets_path = if let Some(stripped) = DEFAULT_PRESETS_PATH.strip_prefix("~/") {
home.join(stripped)
} else {
PathBuf::from(DEFAULT_PRESETS_PATH)
};
Ok(Config {
db_path,
presets_path,
})
}