frate 0.4.0

A local, dev-focused package manager for developer tools, inspired by Scoop and Cargo
Documentation
use std::path::PathBuf;
use anyhow::{anyhow, Result};
use directories::ProjectDirs;

pub fn get_global_config_dir() -> Result<PathBuf> {
    let (config_dir, _, _) = get_global_dirs()?;
    Ok(config_dir)
}

pub fn get_global_cache_dir() -> Result<PathBuf> {
    let (_, cache_dir, _) = get_global_dirs()?;
    Ok(cache_dir)
}

pub fn get_global_data_dir() -> Result<PathBuf> {
    let (_, _, data_dir) = get_global_dirs()?;
    Ok(data_dir)
}

pub fn get_global_dirs() -> Result<(PathBuf, PathBuf, PathBuf)> {
    let proj_dirs = ProjectDirs::from("org", "frate", "frate")
        .ok_or_else(|| anyhow!("Could not get project directories"))?;

    let config_dir = proj_dirs.config_dir().to_path_buf();
    let cache_dir = proj_dirs.cache_dir().to_path_buf();
    let data_dir = proj_dirs.data_dir().to_path_buf();

    Ok((config_dir, cache_dir, data_dir ))
}