Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/examples/01b_quick_example.rs b/examples/01b_quick_example.rs
- index 24dca77..73d6567 100644
- --- a/examples/01b_quick_example.rs
- +++ b/examples/01b_quick_example.rs
- @@ -1,6 +1,114 @@
- extern crate clap;
- -use clap::{App, Arg, SubCommand};
- +use clap::{App, AppSettings, Arg, SubCommand};
- +
- +macro_rules! clap_matcher {
- + (@app_builder $app_builder:ident version: $v:expr) => {
- + $app_builder.version($v)
- + };
- + (@app_builder $app_builder:ident author: $v:expr) => {
- + $app_builder.author($v)
- + };
- + (@app_builder $app_builder:ident description: $v:expr) => {
- + $app_builder.about($v)
- + };
- + (@app_builder $app_builder:ident @arg $name:ident: $($tt:tt)*) => {
- + $app_builder.arg(clap_matcher!{ @arg_builder (Arg::with_name(stringify!($name))) $($tt)* });
- + };
- + (@app_builder $app_builder:ident setting: $setting:ident) => {
- + $app_builder.setting(AppSettings::$setting)
- + };
- + (@app_builder $app_builder:ident @subcommand $name:ident => $(($($tt:tt)*))*) => {
- + $app_builder.subcommand({
- + let _builder = SubCommand::with_name(stringify!($name));
- + $( let _builder = clap_matcher!{ @app_builder _builder $($tt)*}; )*
- + _builder
- + })
- + };
- +
- + (@arg_builder ($arg_builder:expr)) => { $arg_builder };
- + (@arg_builder ($arg_builder:expr) --$long:ident $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.long(stringify!($long))) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) -$short:ident $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.short(stringify!($short))) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) <$var:ident> $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.value_name(stringify!($var))) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) [$var:ident] $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.value_name(stringify!($var))) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) takes_value $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.takes_value(true)) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) multiple $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.multiple(true)) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) global $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.global(true)) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) required $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.required(true)) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) deny_empty $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.empty_values(false)) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) number_of_values($n:expr) $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.number_of_values($n)) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) min_values($n:expr) $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.min_values($n)) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) max_values($n:expr) $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.max_values($n)) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) index($n:expr) $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.index($n)) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) group($n:expr) $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.group($n)) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) requires() $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) requires($require:ident $($tail:ident)*) $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.requires(stringify!($require))) requires($($tail)*) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) conflicts() $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) conflicts($value:ident $($tail:ident)*) $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.conflicts_with(stringify!($value)))
- + conflicts($($tail)*) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) mutually_overrides() $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) mutually_overrides($value:ident $($tail:ident)*) $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.mutually_overrides_with(stringify!($value)))
- + mutually_overrides($($tail)*) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) possible_values() $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) possible_values($value:ident $($tail:ident)*) $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.possible_value(stringify!($value)))
- + possible_values($($tail)*) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) {$fn_:expr} $($tt:tt)*) => {
- + clap_matcher!{ @arg_builder ($arg_builder.validator($fn_)) $($tt)* }
- + };
- + (@arg_builder ($arg_builder:expr) $desc:expr) => {
- + $arg_builder.help($desc)
- + };
- +
- + ($name:ident => $(($($tt:tt)*))*) => {{
- + let _builder = App::new(stringify!($name));
- + $( let _builder = clap_matcher!{ @app_builder _builder $($tt)*}; )*
- + _builder.get_matches()
- + }};
- +}
- fn main() {
- @@ -34,28 +142,28 @@ fn main() {
- // = Uses "-V" or "--version" (full usage "$ myapp test -V" or "$ myapp test --version")
- // - A subcommand "help" (automatically generated by clap because we specified a subcommand of our own)
- // + Used by "$ myapp help" (same functionality as "-h" or "--help")
- - let matches = App::new("MyApp")
- - .version("1.0")
- - .author("Kevin K. <kbknapp@gmail.com>")
- - .about("Does awesome things")
- - .arg(Arg::with_name("config")
- - .short("c")
- - .long("config")
- - .help("Sets a custom config file")
- - .takes_value(true))
- - .arg(Arg::with_name("output")
- - .help("Sets an optional output file")
- - .index(1))
- - .arg(Arg::with_name("debug")
- - .short("d")
- - .multiple(true)
- - .help("Turn debugging information on"))
- - .subcommand(SubCommand::with_name("test")
- - .about("does testing things")
- - .arg(Arg::with_name("list")
- - .short("l")
- - .help("lists test values")))
- - .get_matches();
- + let matches = clap_matcher!(MyApp =>
- + (setting: SubcommandRequiredElseHelp)
- + (version: "1.0")
- + (author: "Alice")
- + (description: "Does awesome things")
- + (@arg config: -c --config <conf> takes_value "Sets a custom config file")
- + (@arg output: "Sets an optional output file")
- + (@arg debug: -d multiple "Turn debugging information on")
- + (@subcommand test =>
- + (description: "does testing things")
- + (version: "2.5")
- + (@arg list: -l "Lists test values")
- + (@arg test_req: -r takes_value conflicts(list) "Tests requirement for listing")
- + (@arg aaaa: --aaaa takes_value {
- + |a| if a.contains("a") {
- + Ok(())
- + } else {
- + Err(String::from("string does not contain at least one a"))
- + }
- + } "Test if the argument contains an a")
- + )
- + );
- // You can check the value provided by positional arguments, or option arguments
- if let Some(o) = matches.value_of("output") {
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement