use std::path::PathBuf;
use std::{env, fs};
use crate::{new_err, Result};
pub fn get_data_dir() -> Result<PathBuf> {
let mut data_dir = get_env_home()?;
if cfg!(target_os = "windows") {
data_dir.push("Databoxer/Data/");
} else if cfg!(target_os = "macos") {
data_dir.push("Library/Application Support/Databoxer/");
} else { data_dir.push(".local/share/databoxer/");
}
if !data_dir.exists() {
fs::create_dir_all(&data_dir)?;
}
Ok(data_dir)
}
pub fn get_config_dir() -> Result<PathBuf> {
let mut config_dir = get_env_home()?;
if cfg!(target_os = "windows") {
config_dir.push("Databoxer/Config/");
} else if cfg!(target_os = "macos") {
config_dir.push("Library/Preferences/Databoxer/");
} else { config_dir.push(".config/databoxer/");
}
if !config_dir.exists() {
fs::create_dir_all(&config_dir)?;
}
Ok(config_dir)
}
fn get_env_home() -> Result<PathBuf> {
let env = {
if cfg!(target_os = "windows") {
"APPDATA"
} else {
"HOME"
}
};
let home_path = env::var(env)
.map_err(|_| new_err!(OSError: EnvVariableUnavailable, env))?;
let config_dir = PathBuf::from(home_path);
Ok(config_dir)
}