use std::path::PathBuf;
use directories::ProjectDirs;
use crate::error::{CoreError, Result};
#[derive(Debug, Clone)]
pub struct Paths {
pub config_dir: PathBuf,
pub data_dir: PathBuf,
}
impl Paths {
pub fn resolve() -> Result<Self> {
let dirs = ProjectDirs::from("com", "paperfoot", "accounting")
.ok_or_else(|| CoreError::Path("could not resolve platform directories".into()))?;
let config_dir = dirs.config_dir().to_path_buf();
let data_dir = dirs.data_local_dir().to_path_buf();
std::fs::create_dir_all(&config_dir)?;
std::fs::create_dir_all(&data_dir)?;
Ok(Self {
config_dir,
data_dir,
})
}
pub fn config_file(&self) -> PathBuf {
self.config_dir.join("config.toml")
}
pub fn db_file(&self) -> PathBuf {
self.data_dir.join("accounting.db")
}
pub fn assets_dir(&self) -> PathBuf {
self.data_dir.join("assets")
}
}