#[macro_use] extern crate clap; use clap::{Arg, App, ArgGroup}; use std::str::FromStr; use std::process; enum BuildTypes { Release, Debug, } struct Igloo { debug_mode: bool, release_mode: bool, fresh_mode: bool, version: String, name: String, author: String, description: String, } fn main() { let mut _igloo: Igloo = Igloo { debug_mode: true, release_mode: false, fresh_mode: false, version: "v".to_owned() + crate_version!(), name: String::from("Igloo"), author: crate_authors!().to_owned(), description: crate_description!().to_owned(), }; let matches = App::new(_igloo.name) .version(&*_igloo.version) .author(&*_igloo.author) .about(&*_igloo.description) .arg(Arg::with_name("VERSION") .short('v') .multiple(true) .about("Sets the level of verbosity")) .subcommand(App::new("new") .about("Creates a new igloo project") .arg( Arg::new("NAME") .required(true) .about("The name of your new project"))) .subcommand(App::new("run") .about("Builds project on target selected in config file") .arg(Arg::new("RELEASE") .short('R') .long("release") .about("builds in release mode")) .arg(Arg::new("DEBUG") .short('D') .long("debug") .about("builds in debug mode")) .arg(Arg::new("FRESH") .short('F') .long("fresh") .about("Clean project, then builds project"))) .subcommand(App::new("build") .about("Builds project on target selected in config file") .arg(Arg::new("RELEASE") .short('R') .long("release") .about("builds in release mode")) .arg(Arg::new("DEBUG") .short('D') .long("debug") .about("builds in debug mode")) .arg(Arg::new("FRESH") .short('F') .long("fresh") .about("Clean project, then builds project"))) .subcommand(App::new("clean") .about("Cleans project") .version("0.0") .arg(Arg::new("verbose") .short('v') .about("cleans project and prints extra info"))) .get_matches(); match matches.subcommand() { ("new", Some(new_matches)) => { println!("Creating new project named {}", new_matches.value_of("NAME").unwrap()); } ("run", Some(run_matches)) => { if run_matches.is_present("FRESH") { println!("Building fresh project"); _igloo.fresh_mode = true; } if run_matches.is_present("RELEASE") && run_matches.is_present("DEBUG") { println!("Can't run in debug and release mode..."); process::exit(1); } else if run_matches.is_present("DEBUG") { _igloo.debug_mode = true; } else if run_matches.is_present("RELEASE") { _igloo.release_mode = true; _igloo.debug_mode = false; } } ("build", Some(build_matches)) => { if build_matches.is_present("FRESH") { println!("Building fresh project"); _igloo.fresh_mode = true; } if build_matches.is_present("RELEASE") && build_matches.is_present("DEBUG") { println!("Can't run in debug and release mode..."); process::exit(1); } else if build_matches.is_present("DEBUG") { _igloo.debug_mode = true; } else if build_matches.is_present("RELEASE") { _igloo.release_mode = true; _igloo.debug_mode = false; } } ("", None) => println!("No subcommand was used"), _ => unreachable!(), } } fn igloo_run(igloo_inst: &Igloo) { } fn igloo_build(igloo_inst: &Igloo) { } fn igloo_clean(igloo_inst: &Igloo) { } fn igloo_init(igloo_inst: &Igloo) { } fn igloo_search(igloo_inst: &Igloo) { } fn igloo_test(igloo_inst: &Igloo) { } fn igloo_doc(igloo_inst: &Igloo) { }