From 18499236b5463d350e41c735da6393a2e3c3709e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hubert=20Figui=C3=A8re?= Date: Sun, 7 Feb 2016 12:10:27 -0500 Subject: [PATCH] Use docopt macro instead --- Cargo.lock | 9 +++++++++ Cargo.toml | 1 + src/main.rs | 36 ++++++++++++------------------------ 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9a16c500..1415ab0f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,6 +4,7 @@ version = "0.1.0" dependencies = [ "clippy 0.0.37 (registry+https://github.com/rust-lang/crates.io-index)", "docopt 0.6.78 (registry+https://github.com/rust-lang/crates.io-index)", + "docopt_macros 0.6.80 (registry+https://github.com/rust-lang/crates.io-index)", "env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "iron 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -99,6 +100,14 @@ dependencies = [ "strsim 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "docopt_macros" +version = "0.6.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "docopt 0.6.78 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "env_logger" version = "0.3.2" diff --git a/Cargo.toml b/Cargo.toml index cc8ef101..737f14b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ build = "build.rs" [dependencies] clippy = "0.0.37" docopt = "0.6.78" +docopt_macros = "0.6.80" env_logger = "0.3.2" iron = "0.2.6" log = "0.3" diff --git a/src/main.rs b/src/main.rs index d28327d0..b8ad9a40 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,8 @@ // Needed to derive `Serialize` on ServiceProperties #![feature(custom_derive, plugin)] #![plugin(serde_macros)] +// For Docopt macro +#![plugin(docopt_macros)] // Needed for IntoIter in context.rs #![feature(collections)] @@ -37,9 +39,8 @@ mod controler; use context::Context; use controler::Controler; -use docopt::Docopt; -const USAGE: &'static str = " +docopt!(Args derive Debug, " Usage: foxbox [-v] [-h] [-n ] [-p ] [-w ] Options: @@ -48,28 +49,15 @@ Options: -p, --port Set port to listen on for http connections. -w, --wsport Set port to listen on for websocket. -h, --help Print this help menu. -"; - -#[derive(RustcDecodable)] -struct Args { - flag_verbose: bool, - flag_name: Option, - flag_port: Option, - flag_wsport: Option, - flag_help: bool, -} +", + flag_name: Option, + flag_port: Option, + flag_wsport: Option); fn main() { env_logger::init().unwrap(); - let args: Args = Docopt::new(USAGE) - .and_then(|d| d.decode()) - .unwrap_or_else(|e| e.exit()); - - if args.flag_help { - println!("{}", USAGE); - return - } + let args: Args = Args::docopt().decode().unwrap_or_else(|e| e.exit()); if let Ok(mut event_loop) = mio::EventLoop::new() { let sender = event_loop.channel(); @@ -93,8 +81,8 @@ fn options_are_good() { let argv = || vec!["foxbox", "-p", "1234", "-n", "foobar", "-w", "4567", "-v"]; - let args: Args = Docopt::new(USAGE) - .and_then(|d| d.argv(argv().into_iter()).decode()) + let args: Args = Args::docopt().argv(argv().into_iter()) + .decode() .unwrap_or_else(|e| e.exit()); assert_eq!(args.flag_verbose, true); @@ -109,8 +97,8 @@ fn options_are_good() { "--name", "foobar", "--wsport", "4567", "--verbose"]; - let args: Args = Docopt::new(USAGE) - .and_then(|d| d.argv(argv().into_iter()).decode()) + let args: Args = Args::docopt().argv(argv().into_iter()) + .decode() .unwrap_or_else(|e| e.exit()); assert_eq!(args.flag_verbose, true);