slox-core 0.9.0

Package Manager written in rust
Documentation
use std::path::PathBuf;
use std::sync::OnceLock;

static SLOX_STORE: OnceLock<PathBuf> = OnceLock::new();

#[derive(Debug, Clone)]
pub(crate) struct StorePaths {
    pub(crate) base: PathBuf,
}

impl StorePaths {
    pub(crate) fn default() -> Self {
        Self {
            base: default_store().clone(),
        }
    }

    pub(crate) fn env_dir(&self, path: &str) -> PathBuf {
        self.base.join("env").join(path)
    }

    pub(crate) fn root_bin_dir(&self) -> PathBuf {
        self.base.join("root").join("bin")
    }

    pub(crate) fn shim_bin_dir(&self) -> PathBuf {
        self.base.join("bin")
    }

    pub(crate) fn cache_root(&self) -> PathBuf {
        self.base.join("tmp")
    }

    pub(crate) fn active_env_file(&self) -> PathBuf {
        self.base.join("active-env")
    }

    pub(crate) fn env_bin_dir(&self, path: &str) -> PathBuf {
        self.env_dir(path).join("bin")
    }
}

fn default_store() -> &'static PathBuf {
    SLOX_STORE.get_or_init(|| {
        let mut home = home::home_dir().expect("failed to find home path");
        home.push(".slox");
        home
    })
}