assembly 0.4.1

Library for files/resources for LU related software
Documentation
mod sysdiagram;
mod pki;

use sysdiagram::{main as sysdiagram_main, MainError as SysDiagramError};
use pki::{main as pki_main, MainError as PkiError};
use getopts::Options;
use std::env;

#[derive(Debug)]
enum CLIError {
    SysDiagram(SysDiagramError),
    PKI(PkiError),
}

fn print_usage(program: &str, opts: Options) {
    let brief = format!("Usage: {} SUBCOMMAND [options]", program);
    print!("{}", opts.usage(&brief));
}

fn main() -> Result<(), CLIError> {
    let args: Vec<String> = env::args().collect();
    let program = args[0].clone();

    let mut opts = Options::new();
    opts.optflag("h", "help", "print this help menu");
    let matches = match opts.parse(&args[1..]) {
        Ok(m) => { m }
        Err(f) => { panic!(f.to_string()) }
    };
    if matches.opt_present("h") {
        print_usage(&program, opts);
        return Ok(());
    }
    let subcommand = if !matches.free.is_empty() {
        matches.free[0].clone()
    } else {
        print_usage(&program, opts);
        return Ok(());
    };
    if subcommand == "sysdiagram" {
        sysdiagram_main(matches.free).map_err(CLIError::SysDiagram)
    } else if subcommand == "pki" {
        pki_main(matches.free).map_err(CLIError::PKI)
    } else {
        print_usage(&program, opts);
        Ok(())
    }
}