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
|
use docopt::Docopt;
use serde::Deserialize;
// Write the Docopt usage string.
const USAGE: &'static str = "
Rust's package manager
Usage:
cargo <command> [<args>...]
cargo [options]
Options:
-h, --help Display this message
-V, --version Print version info and exit
--list List installed commands
-v, --verbose Use verbose output
Some common cargo commands are:
build Compile the current project
clean Remove the target directory
doc Build this project's and its dependencies' documentation
new Create a new cargo project
run Build and execute src/main.rs
test Run the tests
bench Run the benchmarks
update Update dependencies listed in Cargo.lock
See 'cargo help <command>' for more information on a specific command.
";
#[derive(Debug, Deserialize)]
struct Args {
arg_command: Option<Command>,
arg_args: Vec<String>,
flag_list: bool,
flag_verbose: bool,
}
#[derive(Debug, Deserialize)]
enum Command {
Build,
Clean,
Doc,
New,
Run,
Test,
Bench,
Update,
}
fn main() {
let args: Args = Docopt::new(USAGE)
.and_then(|d| d.options_first(true).deserialize())
.unwrap_or_else(|e| e.exit());
println!("{:?}", args);
}
|