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
#[macro_export]
macro_rules! autoclap {
    () => {
        Command::new(format!(
            "{}{}{}{}{}",
            env!("CARGO_PKG_NAME"),
            " ",
            env!("CARGO_PKG_VERSION"),
            " :: ",
            format!(
                "{}{}{}",
                env!("CARGO_PKG_REPOSITORY"),
                "/releases/tag/",
                env!("CARGO_PKG_VERSION"),
            )
        ))
        .author(env!("CARGO_PKG_AUTHORS"))
        .about(env!("CARGO_PKG_DESCRIPTION"))
        .arg(
            Arg::new("debug")
                .long("debug")
                .short('D')
                .help("Print raw data used internally."),
        )
    };
}

#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    fn test_autoclap_name_works_when_typical() {
        use clap::{Arg, Command};
        let app = autoclap!();
        assert_eq!(
            app.get_name(),
            "autoclap 0.2.1 :: https://github.com/mihaigalos/autoclap/releases/tag/0.2.1"
        );
    }
    #[test]
    fn test_autoclap_description_works_when_typical() {
        use clap::{Arg, Command};
        let app = autoclap!();
        assert_eq!(
            app.get_about().unwrap(),
            "๐Ÿ‘ Auto-propagate Cargo.toml infos (name, version, author, repo) into app."
        );
    }
}