#![warn(missing_docs)]
#![doc = include_str!("../README.md")]
use std::{env, path::PathBuf};
use miette::Diagnostic;
use thiserror::Error;
pub mod cache;
pub mod command;
pub mod credentials;
pub mod errors;
pub mod io;
pub mod lock;
pub mod logs;
pub mod manifest;
pub mod operations;
pub mod package;
pub mod registry;
pub mod resolver;
#[cfg(feature = "validation")]
pub mod validation;
pub mod workspace;
pub const BUFFRS_HOME: &str = ".buffrs";
pub(crate) const BUFFRS_HOME_VAR: &str = "BUFFRS_HOME";
#[derive(Error, Diagnostic, Debug)]
#[error("could not determine buffrs home location")]
struct HomeError(#[diagnostic_source] miette::Report);
fn home() -> Result<PathBuf, HomeError> {
env::var(BUFFRS_HOME_VAR)
.map(PathBuf::from)
.or_else(|_| {
home::home_dir()
.ok_or_else(|| miette::miette!("{BUFFRS_HOME_VAR} is not set and the user's home folder could not be determined"))
})
.map(|home| home.join(BUFFRS_HOME))
.map_err(HomeError)
}
#[derive(Debug)]
pub(crate) enum ManagedFile {
Credentials,
Manifest,
Lock,
}
impl ManagedFile {
fn name(&self) -> &str {
use credentials::CREDENTIALS_FILE;
use lock::LOCKFILE;
use manifest::MANIFEST_FILE;
match self {
ManagedFile::Manifest => MANIFEST_FILE,
ManagedFile::Lock => LOCKFILE,
ManagedFile::Credentials => CREDENTIALS_FILE,
}
}
}
impl std::fmt::Display for ManagedFile {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.name())
}
}