1use docopt::Docopt;
2use serde::Deserialize;
3
4const USAGE: &'static str = "
5Naval Fate.
6
7Usage:
8 naval_fate.py ship new <name>...
9 naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
10 naval_fate.py ship shoot <x> <y>
11 naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]
12 naval_fate.py (-h | --help)
13 naval_fate.py --version
14
15Options:
16 -h --help Show this screen.
17 --version Show version.
18 --speed=<kn> Speed in knots [default: 10].
19 --moored Moored (anchored) mine.
20 --drifting Drifting mine.
21";
22
23#[derive(Debug, Deserialize)]
24struct Args {
25 flag_speed: isize,
26 flag_drifting: bool,
27 arg_name: Vec<String>,
28 arg_x: Option<isize>,
29 arg_y: Option<isize>,
30 cmd_ship: bool,
31 cmd_mine: bool,
32}
33
34fn main() {
35 let args: Args = Docopt::new(USAGE)
36 .and_then(|d| d.deserialize())
37 .unwrap_or_else(|e| e.exit());
38 println!("{:?}", args);
39
40 println!("\nSome values:");
41 println!(" Speed: {}", args.flag_speed);
42 println!(" Drifting? {}", args.flag_drifting);
43 println!(" Names: {:?}", args.arg_name);
44 println!(" Command 'ship' invoked? {:?}", args.cmd_ship);
45}