use std::path::PathBuf;
pub fn home_dir() -> Option<PathBuf> {
#[cfg(windows)]
{
std::env::var_os("USERPROFILE")
.or_else(|| std::env::var_os("HOME"))
.map(PathBuf::from)
}
#[cfg(not(windows))]
{
std::env::var_os("HOME").map(PathBuf::from)
}
}
#[cfg(not(target_os = "windows"))]
pub(crate) fn require_home_dir() -> Result<PathBuf, crate::CargoTruceError> {
home_dir().ok_or_else(|| -> crate::CargoTruceError {
if cfg!(windows) {
"can't determine home directory: neither USERPROFILE nor HOME is set".into()
} else {
"can't determine home directory: HOME is not set".into()
}
})
}
#[cfg(target_os = "windows")]
pub(crate) fn require_local_appdata() -> Result<PathBuf, crate::CargoTruceError> {
std::env::var_os("LOCALAPPDATA")
.map(PathBuf::from)
.ok_or_else(|| "LOCALAPPDATA env var not set".into())
}
#[cfg(target_os = "windows")]
pub(crate) fn require_appdata() -> Result<PathBuf, crate::CargoTruceError> {
std::env::var_os("APPDATA")
.map(PathBuf::from)
.ok_or_else(|| "APPDATA env var not set".into())
}