38 lines
988 B
Rust
38 lines
988 B
Rust
use directories_next::BaseDirs;
|
|
use serde::Deserialize;
|
|
use std::str::FromStr;
|
|
|
|
#[derive(Debug, Deserialize)]
|
|
pub struct Config {
|
|
#[serde(with = "serde_with::rust::display_fromstr")]
|
|
pub log_level: log::Level,
|
|
}
|
|
|
|
impl Default for Config {
|
|
fn default() -> Self {
|
|
Self {
|
|
log_level: log::Level::from_str("info").unwrap(),
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn load_config() -> Result<Config, Box<dyn std::error::Error>> {
|
|
if let Some(base_dirs) = BaseDirs::new() {
|
|
let config_dir = base_dirs.config_dir();
|
|
|
|
let config_file = std::fs::File::open(config_dir.join("musicutil.yaml"));
|
|
if config_file.is_err() {
|
|
return Ok(Config::default());
|
|
}
|
|
|
|
let config: Result<Config, serde_yaml::Error> =
|
|
serde_yaml::from_reader(config_file.unwrap());
|
|
match config {
|
|
Ok(conf) => return Ok(conf),
|
|
Err(err) => return Err(Box::new(err)),
|
|
}
|
|
}
|
|
|
|
return Ok(Config::default());
|
|
}
|