use std::path::Path;
use directories::UserDirs;
use serde::Deserialize;
use crate::error::WakapiError;
#[derive(Deserialize)]
pub struct WakatimeConfig {
pub settings: Option<ConfigSettings>,
}
#[derive(Deserialize)]
pub struct ConfigSettings {
pub debug: Option<bool>,
pub api_key: Option<String>,
pub api_url: Option<String>,
}
impl WakatimeConfig {
pub fn read(location: Option<String>) -> Result<Self, WakapiError> {
let path = match location {
Some(location) => Path::new(&location).join(".wakatime.cfg"),
None => match std::env::var("WAKATIME_HOME") {
Ok(home) => Path::new(&home).join(".wakatime.cfg"),
Err(_) => match UserDirs::new() {
Some(user_dirs) => user_dirs.home_dir().join(".wakatime.cfg"),
None => {
return Err(WakapiError::HomeDirNotFound);
}
},
},
};
let content = std::fs::read_to_string(path)?;
let config: WakatimeConfig = toml::from_str(&content)?;
Ok(config)
}
}