use std::{
fs,
path::{Path, PathBuf},
};
pub(crate) struct DirPath {
bin_dir: PathBuf,
config_file: PathBuf,
git_dir: PathBuf,
checkout_dir: PathBuf,
db_dir: PathBuf,
registry_dir: PathBuf,
cache_dir: PathBuf,
index_dir: PathBuf,
src_dir: PathBuf,
}
impl DirPath {
pub(crate) fn set_dir_path() -> Self {
let config_dir = dirs::config_dir().expect("Cannot get config directory location");
if !config_dir.exists() {
fs::create_dir_all(&config_dir).expect("Failed to create config dir");
}
let config_file = config_dir.join("cargo_trim_config.toml");
if !config_file.exists() {
fs::File::create(config_file.to_str().unwrap()).expect("Failed to create config file");
}
let home_dir = Path::new(env!("CARGO_HOME")).to_path_buf();
let bin_dir = home_dir.join("bin");
let git_dir = home_dir.join("git");
let checkout_dir = git_dir.join("checkouts");
let db_dir = git_dir.join("db");
let registry_dir = home_dir.join("registry");
let cache_dir = registry_dir.join("cache");
let src_dir = registry_dir.join("src");
let index_dir = registry_dir.join("index");
Self {
bin_dir,
config_file,
git_dir,
checkout_dir,
db_dir,
registry_dir,
cache_dir,
index_dir,
src_dir,
}
}
pub(crate) fn bin_dir(&self) -> &PathBuf {
&self.bin_dir
}
pub(crate) fn config_file(&self) -> &PathBuf {
&self.config_file
}
pub(crate) fn git_dir(&self) -> &PathBuf {
&self.git_dir
}
pub(crate) fn checkout_dir(&self) -> &PathBuf {
&self.checkout_dir
}
pub(crate) fn db_dir(&self) -> &PathBuf {
&self.db_dir
}
pub(crate) fn registry_dir(&self) -> &PathBuf {
&self.registry_dir
}
pub(crate) fn cache_dir(&self) -> &PathBuf {
&self.cache_dir
}
pub(crate) fn index_dir(&self) -> &PathBuf {
&self.index_dir
}
pub(crate) fn src_dir(&self) -> &PathBuf {
&self.src_dir
}
}