arguments libraries
We could polish up this binary with some better command line argument parsing, error messages, version, etc, but if you were thinking someone else has to have done this type of work before, you'd be right. Theres a helper called structopt that uses macros to annotate your existing struct.
use std::path::PathBuf;
use structopt::StructOpt;
#[derive(StructOpt, Debug)]
#[structopt(name = "training")]
struct Arguments {
#[structopt(short = "i", long = "input", parse(from_os_str))]
input_path: PathBuf,
#[structopt(short = "o", long = "output", parse(from_os_str))]
output_path: PathBuf,
}
Then not too much changes in our existing main.
fn main() {
let arguments = Arguments::from_args();
println!("{:?}", arguments);
}
Running cargo run -- -i valve.png -o valve_sobel.png
results in
Arguments { input_path: "valve.png", output_path: "valve_sobel.png" }
and running cargo run -- --help
training 0.1.0
First Last <FirstL@gmail.com>
USAGE:
training --input <input_path> --output <output_path>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-i, --input <input_path>
-o, --output <output_path>