Add TOML support to load_configs()

pull/403/head
Matt Amend 5 months ago
parent fa6290e2ac
commit f8c831f44e

@ -12,6 +12,7 @@ pub mod remap;
mod tests;
extern crate serde_yaml;
extern crate toml;
use evdev::Key;
use keymap::Keymap;
@ -54,12 +55,25 @@ pub struct Config {
pub fn load_configs(filenames: &Vec<PathBuf>) -> Result<Config, Box<dyn error::Error>> {
// Assumes filenames is non-empty
let yaml = fs::read_to_string(&filenames[0])?;
let mut config: Config = serde_yaml::from_str(&yaml)?;
let config_contents = fs::read_to_string(&filenames[0])?;
let mut is_yaml = true;
let mut config: Config = {
match serde_yaml::from_str(&config_contents) {
Ok(c) => c,
Err(_) => { is_yaml = false; toml::from_str(&config_contents)? }
}
};
for filename in &filenames[1..] {
let yaml = fs::read_to_string(&filename)?;
let c: Config = serde_yaml::from_str(&yaml)?;
let config_contents = fs::read_to_string(&filename)?;
let c: Config = {
match is_yaml {
true => serde_yaml::from_str(&config_contents)?,
false => toml::from_str(&config_contents)?
}
};
config.modmap.extend(c.modmap);
config.keymap.extend(c.keymap);
config.virtual_modifiers.extend(c.virtual_modifiers);

Loading…
Cancel
Save