1 use docopt::Docopt;
2
3 const USAGE: &'static str = "
4 Naval Fate.
5
6 Usage:
7 naval_fate.py ship new <name>...
8 naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
9 naval_fate.py ship shoot <x> <y>
10 naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]
11 naval_fate.py (-h | --help)
12 naval_fate.py --version
13
14 Options:
15 -h --help Show this screen.
16 --version Show version.
17 --speed=<kn> Speed in knots [default: 10].
18 --moored Moored (anchored) mine.
19 --drifting Drifting mine.
20 ";
21
main()22 fn main() {
23 let version = "1.2.3".to_owned();
24 let args = Docopt::new(USAGE)
25 .and_then(|dopt| dopt.version(Some(version)).parse())
26 .unwrap_or_else(|e| e.exit());
27 println!("{:?}", args);
28
29 // You can conveniently access values with `get_{bool,count,str,vec}`
30 // functions. If the key doesn't exist (or if, e.g., you use `get_str` on
31 // a switch), then a sensible default value is returned.
32 println!("\nSome values:");
33 println!(" Speed: {}", args.get_str("--speed"));
34 println!(" Drifting? {}", args.get_bool("--drifting"));
35 println!(" Names: {:?}", args.get_vec("<name>"));
36 println!(" Command 'ship' invoked? {:?}", args.get_bool("ship"));
37 }
38