added config check

This commit is contained in:
Kai Kriegel 2021-08-27 21:51:44 +02:00
parent 8ce5c2f6ff
commit fc614d7ce2

View File

@ -40,6 +40,7 @@ use error::Error;
use slog::Logger; use slog::Logger;
use paho_mqtt::AsyncClient; use paho_mqtt::AsyncClient;
use crate::config::Config;
fn main() { fn main() {
use clap::{crate_version, crate_description, crate_name}; use clap::{crate_version, crate_description, crate_name};
@ -59,6 +60,11 @@ fn main() {
.help("Print a default config to stdout instead of running") .help("Print a default config to stdout instead of running")
.long("print-default") .long("print-default")
) )
.arg(Arg::with_name("check config")
.help("Check config for validity")
.long("check")
.requires("config")
)
.arg(Arg::with_name("dump") .arg(Arg::with_name("dump")
.help("Dump all databases into the given directory") .help("Dump all databases into the given directory")
.long("dump") .long("dump")
@ -87,6 +93,24 @@ fn main() {
// Early return to exit. // Early return to exit.
return; return;
} else if matches.is_present("check config") {
let configpath = matches.value_of("config").unwrap_or("/etc/diflouroborane.dhall");
match config::read(&PathBuf::from_str(configpath).unwrap()) {
Ok(cfg) => {
let encoded = serde_dhall::serialize(&cfg).to_string().unwrap();
// Direct writing to fd 1 is faster but also prevents any print-formatting that could
// invalidate the generated TOML
let stdout = io::stdout();
let mut handle = stdout.lock();
handle.write_all(&encoded.as_bytes()).unwrap();
std::process::exit(0);
}
Err(e) => {
eprintln!("{}", e);
std::process::exit(-1);
}
}
} }
let retval; let retval;