updated config management

This commit is contained in:
Paul Lecuq 2021-12-06 17:17:24 +01:00
parent 43cac4a821
commit b7a9def20d

View File

@ -85,6 +85,7 @@ pub struct Config {
pub server: String,
pub username: String,
pub password: String,
#[serde(skip_serializing)]
pub authtoken: Option<String>,
pub sloweffect: Option<bool>,
pub refresh: Option<u64>,
@ -107,6 +108,7 @@ impl<'a> Config {
pub fn load(&'a mut self, configfile: &str) {
let fileopen: Result<File, std::io::Error>;
let filemeta = std::fs::metadata(configfile);
let mut errorreading = false;
let fileexists = match filemeta {
Ok(_) => true,
Err(_) => false,
@ -126,26 +128,30 @@ impl<'a> Config {
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
let parse: Result<JsonValue, JsonError> = serde_json::from_str(contents.as_str());
*self = match parse {
Ok(cfg) => {
let newcfg = match parse {
Ok(ncfg) => {
let tmpcfg = Config::new();
Config {
server: cfg["server"].as_str().unwrap_or(tmpcfg.server.as_str()).to_string(),
username: cfg["username"].as_str().unwrap_or(tmpcfg.username.as_str()).to_string(),
password: cfg["password"].as_str().unwrap_or(tmpcfg.password.as_str()).to_string(),
authtoken: Some(cfg["authtoken"].as_str().unwrap_or(tmpcfg.authtoken.unwrap().as_str()).to_string()),
sloweffect: Some(cfg["sloweffect"].as_bool().unwrap_or(tmpcfg.sloweffect.unwrap())),
refresh: Some(cfg["refresh"].as_u64().unwrap_or(tmpcfg.refresh.unwrap())),
limit: Some(cfg["limit"].as_u64().unwrap_or(tmpcfg.limit.unwrap())),
server: ncfg["server"].as_str().unwrap_or(tmpcfg.server.as_str()).to_string(),
username: ncfg["username"].as_str().unwrap_or(tmpcfg.username.as_str()).to_string(),
password: ncfg["password"].as_str().unwrap_or(tmpcfg.password.as_str()).to_string(),
authtoken: Some(ncfg["authtoken"].as_str().unwrap_or(self.authtoken.clone().unwrap().as_str()).to_string()),
sloweffect: Some(ncfg["sloweffect"].as_bool().unwrap_or(tmpcfg.sloweffect.unwrap())),
refresh: Some(ncfg["refresh"].as_u64().unwrap_or(tmpcfg.refresh.unwrap())),
limit: Some(ncfg["limit"].as_u64().unwrap_or(tmpcfg.limit.unwrap())),
}
},
Err(err) => {
errorreading = true;
println!("error occured: '{}'", err);
Config::new()
}
};
*self = newcfg;
if !fileexists || errorreading {
self.save(&configfile);
}
}
pub fn save(&self, configfile: &str) {
let file = File::create(configfile).unwrap();