use std::fs;
use json::{JsonValue, object};
#[derive(Clone, Debug)]
pub struct Config {
pub log: bool,
pub extend: Vec<String>,
pub addon_hide: Vec<String>,
pub wss: bool,
pub web: bool,
pub token_exp: u64,
pub token: String,
}
impl Config {
pub fn load(path: &str) -> Self {
let json = match fs::read_to_string(path) {
Ok(e) => json::parse(&*e).unwrap(),
Err(_) => {
let json = object! {
"default":"base",
"connections":object! {
"base": {
"log": true,
"extend": ["mail","spaces"],
"addon_hide": [],
"wss":false,
"web":false,
"token_exp":60*60*4,
"token":""
}
}
};
fs::write(path, json.to_string()).unwrap();
json
}
};
Config::from(json)
}
pub fn from(data: JsonValue) -> Self {
let default = data["default"].as_str().unwrap();
let connection = data["connections"][default].clone();
let addon_hide = connection["addon_hide"].members().map(|x| x.to_string()).collect::<Vec<String>>().clone();
Config {
log: connection["log"].as_bool().unwrap_or(true),
extend: connection["extend"].members().map(|x| x.to_string()).collect::<Vec<String>>().clone(),
addon_hide,
wss: connection["wss"].as_bool().unwrap_or(false),
web: connection["web"].as_bool().unwrap_or(false),
token_exp: connection["token_exp"].as_u64().unwrap_or(60 * 60 * 4),
token: connection["token"].to_string(),
}
}
pub fn default() -> Self {
Config {
log: false,
extend: vec![],
addon_hide: vec![],
wss: false,
web: false,
token_exp: 60 * 10,
token: "".to_string(),
}
}
}