[go: up one dir, main page]

decode/
decode.rs

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}