simon 0.4.0

Library for declaratively specifying and parsing command line arguments
Documentation
extern crate simon;

use simon::*;

#[derive(Debug, Clone)]
enum Dimensions {
    Fullscreen,
    Window { width: u32, height: u32 },
}

impl Dimensions {
    fn args() -> impl Arg<Item = Self> {
        let window = args_depend! {
            opt("", "width", "", ""),
            opt("", "height", "", ""),
        }
        .option_map(|(width, height)| Dimensions::Window { width, height });
        let fullscreen = flag("", "fullscreen", "").some_if(Dimensions::Fullscreen);
        window.choice(fullscreen).required()
    }
}

fn main() {
    let dimensions = Dimensions::args().with_help_default().parse_env_or_exit();
    println!("{:#?}", dimensions);
}