#[macro_use]
extern crate clap;
extern crate draw_bridge;
use clap::{App, Arg};
use log::info;
use simplelog::{Config, LevelFilter, TermLogger};
use draw_bridge::socket;
mod cli {
pub mod args {
pub mod socket {
pub const ARG_NAME: &str = "socket";
pub const ENV_VAR: &str = "BRIDGE_SOCK";
pub const HELP: &str = "The IPC socket drawbridge will listen on";
}
pub mod verbosity {
pub const ARG_NAME: &str = "verbosity";
}
}
}
fn main() {
let app = App::new("drawbridge")
.about("An IPC socket-based API around EBB drawing robot devices")
.author("Ross Donaldson")
.version(&crate_version!()[..])
.arg(
Arg::with_name(cli::args::socket::ARG_NAME)
.short("s")
.long("socket")
.env(cli::args::socket::ENV_VAR)
.help(cli::args::socket::HELP)
.required(true),
).arg(
Arg::with_name(cli::args::verbosity::ARG_NAME)
.multiple(true)
).arg(
Arg::with_name("reference")
.long("reference")
.short("r")
);
let matches = app.get_matches();
let sock = matches.value_of("socket").unwrap();
let log_level = match matches.occurrences_of(cli::args::verbosity::ARG_NAME) {
0 => LevelFilter::Info,
1 => LevelFilter::Debug,
2 | _ => LevelFilter::Trace,
};
let reference = matches.is_present("reference");
TermLogger::init(log_level, Config::default()).unwrap();
info!("Bridge coming online! Setting up...");
info!("Opening socket and listening at {}", sock);
socket::listen_and_handle(sock, reference);
}