1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use anyhow::{anyhow, Result};
use std::{env, fs::File, path::Path};
use crate::config::data::*;
pub fn parse_solana_config() -> Option<SolanaConfig> {
let home = if cfg!(unix) {
env::var_os("HOME").expect("Couldn't find UNIX home key.")
} else if cfg!(windows) {
let drive = env::var_os("HOMEDRIVE").expect("Couldn't find Windows home drive key.");
let path = env::var_os("HOMEPATH").expect("Couldn't find Windows home path key.");
Path::new(&drive).join(&path).as_os_str().to_owned()
} else if cfg!(target_os = "macos") {
env::var_os("HOME").expect("Couldn't find MacOS home key.")
} else {
panic!("Unsupported OS!");
};
let config_path = Path::new(&home)
.join(".config")
.join("solana")
.join("cli")
.join("config.yml");
let conf_file = match File::open(config_path) {
Ok(f) => f,
Err(_) => return None,
};
serde_yaml::from_reader(&conf_file).ok()
}
pub fn path_to_string(path: &Path) -> Result<String> {
match path.to_str() {
Some(s) => Ok(s.to_string()),
None => Err(anyhow!("Couldn't convert path to string.")),
}
}