evobench_tools/utillib/
home.rs1use std::path::{Path, PathBuf};
2
3use lazy_static::lazy_static;
4
5#[derive(thiserror::Error, Debug)]
6pub enum HomeError {
7 #[error(
8 "path given in HOME environment variable does not point to \
9 an existing directory: {0:?}"
10 )]
11 NotExist(PathBuf),
12 #[error("HOME environment variable is not set")]
13 NotSet,
14}
15
16fn get_home_dir() -> Result<PathBuf, HomeError> {
17 if let Some(var) = std::env::var_os("HOME") {
18 let path: PathBuf = var.into();
19 if path.is_dir() {
20 Ok(path)
21 } else {
22 Err(HomeError::NotExist(path))
23 }
24 } else {
25 Err(HomeError::NotSet)
26 }
27}
28
29lazy_static! {
30 static ref HOME_DIR: Result<PathBuf, HomeError> = get_home_dir();
31}
32
33pub fn home_dir() -> Result<&'static Path, &'static HomeError> {
34 match &*HOME_DIR {
35 Ok(v) => Ok(v),
36 Err(e) => Err(e),
37 }
38}