evobench_tools/utillib/
home.rs

1use 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}