draw_bridge 0.1.1

A driver for AxiDraw Pen Plotters
Documentation
#[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")
    // This macro uses the version listed in the Cargo.toml -- ideal
        .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);
}