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

//! Clap commander
use clap::{App, AppSettings};
use crate::{
    cmds::{
        Command,
        DataCommand,
        EditCommand,
        ListCommand,
        PickCommand,
        StatCommand,
        TestCommand,
    },
    flag::{
        Flag,
        Debug,
    },
    err::Error,
};

/// get maches
pub fn main() -> Result<(), Error>{
    let m = App::new("leetcode")
        .author("clearloop <udtrokia@163.com>")
        .version("0.1.8")
        .about("Leet your code in command-line.")
        .subcommands(vec![
            DataCommand::usage().display_order(1),
            EditCommand::usage().display_order(2),
            ListCommand::usage().display_order(3),
            PickCommand::usage().display_order(4),
            StatCommand::usage().display_order(5),
            TestCommand::usage().display_order(6),
        ])
        .arg(Debug::usage())
        .setting(AppSettings::ArgRequiredElseHelp)
        .get_matches();

    if m.is_present("debug") {
        Debug::handler()?;
    } else {
        env_logger::from_env(env_logger::Env::new().default_filter_or("info"))
        .format_timestamp(None)
        .init();
    }

    match m.subcommand() {
        ("data", Some(sub_m)) => Ok(DataCommand::handler(sub_m)?),
        ("edit", Some(sub_m)) => Ok(EditCommand::handler(sub_m)?),
        ("list", Some(sub_m)) => Ok(ListCommand::handler(sub_m)?),
        ("pick", Some(sub_m)) => Ok(PickCommand::handler(sub_m)?),
        ("stat", Some(sub_m)) => Ok(StatCommand::handler(sub_m)?),
        ("test", Some(sub_m)) => Ok(TestCommand::handler(sub_m)?),
        _ => Err(Error::MatchError)
    }
}