summaryrefslogtreecommitdiff
path: root/src/main.rs
blob: 347e144441bfa90418a1acd9c9823bf0611d23a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
mod args;

use crate::args::Parser;
use std::process::ExitCode;

fn parse_args() -> Result<bool, String> {
    let mut options = args::Options::new();
    let help_idx = options.push(
        args::OptionBuilder::default()
            .short('h')
            .long("help")
            .description("display this and exit")
            .build()
            .unwrap(),
    );
    let version_idx = options.push(
        args::OptionBuilder::default()
            .short('V')
            .long("version")
            .description("display version and exit")
            .build()
            .unwrap(),
    );
    let verbose_idx = options.push(
        args::OptionBuilder::default()
            .long("verbose")
            .description("be verbose")
            .build()
            .unwrap(),
    );
    let test_idx = options.push(
        args::OptionBuilder::default()
            .short('t')
            .long("test")
            .description("testing")
            .value(args::ValueRequirement::Required("FILE"))
            .build()
            .unwrap(),
    );

    let parser = args::ShortAndLongParser::new();
    let args = parser.run(&mut options, std::env::args())?;
    let ref help = options[help_idx];
    if help.is_set() {
        parser.print_help(&options);
        return Ok(true);
    }
    let ref version = options[version_idx];
    if version.is_set() {
        println!("Version is 0.0.1");
        return Ok(true);
    }
    let ref verbose = options[verbose_idx];
    let ref test = options[test_idx];
    println!("verbose: {}", verbose.is_set());
    println!("test: {:?}", test.value());
    println!("args: {:?}", args.args);
    Ok(false)
}

fn main() -> ExitCode {
    match parse_args() {
        Ok(exit) => {
            if exit {
                return ExitCode::SUCCESS;
            }
        }
        Err(msg) => {
            eprintln!("{}", msg);
            return ExitCode::FAILURE;
        }
    }

    ExitCode::SUCCESS
}