fncli 0.2.1

An attribute macro to simplify writing simple command line applications.
Documentation

fncli

An attribute macro to simplify writing simple command line applications.

Example

#[fncli::cli]
fn main(a: i32, b: i32) {
    println!("{}", a + b);
}
$ cargo run 1 2
3
$ cargo run 1
missing argument `b: i32`
$ cargo run 1 2 3
too many arguments (expected 2 arguments)
$ cargo run 1 a
failed to parse argument `b: i32`: ParseIntError { kind: InvalidDigit }

For a more complete example, see the time elapsed example.

How It Works

fn main() {
    let (a, b) = {
        let mut args = std::env::args().skip(1);

        let tuple = (
            {
                let arg = args.next().expect("missing argument `a: i32`");
                i32::from_str(&arg).expect("failed to parse argument `a: i32`")
            },
            {
                let arg = args.next().expect("missing argument `b: i32`");
                i32::from_str(&arg).expect("failed to parse argument `b: i32`")
            },
        );

        if args.next().is_some() {
            panic!("too many arguments (expected 2 arguments)");
        }

        tuple
    };

    {
        println!("{}", a + b);
    }
}

The generated code is very simple, and not too different from how one would write the code by hand.