ecb_rates/
os.rs

1use std::env;
2use std::path::PathBuf;
3
4use crate::APP_NAME;
5
6pub enum Os {
7    Windows,
8    Mac,
9    Unix,
10}
11
12impl Os {
13    pub fn get_current() -> Option<Self> {
14        match env::consts::OS {
15            "windows" => Some(Self::Windows),
16            "macos" => Some(Self::Mac),
17            os_str if os_str == "linux" || os_str.contains("bsd") => Some(Self::Unix),
18            _ => None,
19        }
20    }
21
22    pub fn get_config_path(&self) -> Result<PathBuf, std::env::VarError> {
23        let config_home = match self {
24            Os::Windows => PathBuf::from(env::var("APPDATA")?),
25            Os::Mac => {
26                let mut pb = PathBuf::from(env::var("HOME")?);
27                pb.push("Library");
28                pb.push("Application Support");
29                pb
30            }
31            Os::Unix => match env::var("XDG_CONFIG_HOME") {
32                Ok(k) => PathBuf::from(k),
33                Err(_) => {
34                    let mut home = PathBuf::from(env::var("HOME")?);
35                    home.push(".config");
36                    home
37                }
38            },
39        };
40
41        Ok(config_home.join(APP_NAME))
42    }
43}