updated config management
This commit is contained in:
parent
43cac4a821
commit
b7a9def20d
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user