lysenko-rs/src/bin/lysenko.rs

58 lines
1.4 KiB
Rust

#![forbid(unsafe_code)]
#[macro_use]
extern crate log;
#[macro_use]
extern crate clap;
extern crate env_logger;
use clap::{App, Arg};
use irc_bot::modules;
arg_enum! {
#[derive(Debug)]
enum LogLevel {
Display,
Debug
}
}
fn arg<'a, 'b>(name: &'a str, short: &'b str) -> Arg<'a, 'b> {
return Arg::with_name(name).long(name).short(short);
}
fn main() {
env_logger::init();
let ll_arg = arg("log-level", "l")
.possible_values(&LogLevel::variants())
.default_value("Display")
.case_insensitive(true);
let app = App::new("lysenko")
.arg(arg("config", "C").default_value("lysenko.yml"))
.arg(arg("data-dir", "d").default_value("."))
.arg(ll_arg);
let args = app.get_matches();
let config_file = args.value_of("config").expect("default missing?");
let data_dir = args.value_of("data-dir").expect("default missing?");
let log_level = value_t!(args, "log-level", LogLevel).unwrap_or_else(|err| err.exit());
irc_bot::run(
irc_bot::Config::try_from_path(config_file),
data_dir,
move |err| {
match log_level {
LogLevel::Display => error!("{}", err),
LogLevel::Debug => error!("{:?}", err),
}
irc_bot::ErrorReaction::Proceed
},
&[modules::default, modules::test],
);
}