Advertisement
Guest User

Untitled

a guest
Sep 4th, 2015
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.14 KB | None | 0 0
  1. diff --git a/examples/01b_quick_example.rs b/examples/01b_quick_example.rs
  2. index 24dca77..73d6567 100644
  3. --- a/examples/01b_quick_example.rs
  4. +++ b/examples/01b_quick_example.rs
  5. @@ -1,6 +1,114 @@
  6. extern crate clap;
  7.  
  8. -use clap::{App, Arg, SubCommand};
  9. +use clap::{App, AppSettings, Arg, SubCommand};
  10. +
  11. +macro_rules! clap_matcher {
  12. + (@app_builder $app_builder:ident version: $v:expr) => {
  13. + $app_builder.version($v)
  14. + };
  15. + (@app_builder $app_builder:ident author: $v:expr) => {
  16. + $app_builder.author($v)
  17. + };
  18. + (@app_builder $app_builder:ident description: $v:expr) => {
  19. + $app_builder.about($v)
  20. + };
  21. + (@app_builder $app_builder:ident @arg $name:ident: $($tt:tt)*) => {
  22. + $app_builder.arg(clap_matcher!{ @arg_builder (Arg::with_name(stringify!($name))) $($tt)* });
  23. + };
  24. + (@app_builder $app_builder:ident setting: $setting:ident) => {
  25. + $app_builder.setting(AppSettings::$setting)
  26. + };
  27. + (@app_builder $app_builder:ident @subcommand $name:ident => $(($($tt:tt)*))*) => {
  28. + $app_builder.subcommand({
  29. + let _builder = SubCommand::with_name(stringify!($name));
  30. + $( let _builder = clap_matcher!{ @app_builder _builder $($tt)*}; )*
  31. + _builder
  32. + })
  33. + };
  34. +
  35. + (@arg_builder ($arg_builder:expr)) => { $arg_builder };
  36. + (@arg_builder ($arg_builder:expr) --$long:ident $($tt:tt)*) => {
  37. + clap_matcher!{ @arg_builder ($arg_builder.long(stringify!($long))) $($tt)* }
  38. + };
  39. + (@arg_builder ($arg_builder:expr) -$short:ident $($tt:tt)*) => {
  40. + clap_matcher!{ @arg_builder ($arg_builder.short(stringify!($short))) $($tt)* }
  41. + };
  42. + (@arg_builder ($arg_builder:expr) <$var:ident> $($tt:tt)*) => {
  43. + clap_matcher!{ @arg_builder ($arg_builder.value_name(stringify!($var))) $($tt)* }
  44. + };
  45. + (@arg_builder ($arg_builder:expr) [$var:ident] $($tt:tt)*) => {
  46. + clap_matcher!{ @arg_builder ($arg_builder.value_name(stringify!($var))) $($tt)* }
  47. + };
  48. + (@arg_builder ($arg_builder:expr) takes_value $($tt:tt)*) => {
  49. + clap_matcher!{ @arg_builder ($arg_builder.takes_value(true)) $($tt)* }
  50. + };
  51. + (@arg_builder ($arg_builder:expr) multiple $($tt:tt)*) => {
  52. + clap_matcher!{ @arg_builder ($arg_builder.multiple(true)) $($tt)* }
  53. + };
  54. + (@arg_builder ($arg_builder:expr) global $($tt:tt)*) => {
  55. + clap_matcher!{ @arg_builder ($arg_builder.global(true)) $($tt)* }
  56. + };
  57. + (@arg_builder ($arg_builder:expr) required $($tt:tt)*) => {
  58. + clap_matcher!{ @arg_builder ($arg_builder.required(true)) $($tt)* }
  59. + };
  60. + (@arg_builder ($arg_builder:expr) deny_empty $($tt:tt)*) => {
  61. + clap_matcher!{ @arg_builder ($arg_builder.empty_values(false)) $($tt)* }
  62. + };
  63. + (@arg_builder ($arg_builder:expr) number_of_values($n:expr) $($tt:tt)*) => {
  64. + clap_matcher!{ @arg_builder ($arg_builder.number_of_values($n)) $($tt)* }
  65. + };
  66. + (@arg_builder ($arg_builder:expr) min_values($n:expr) $($tt:tt)*) => {
  67. + clap_matcher!{ @arg_builder ($arg_builder.min_values($n)) $($tt)* }
  68. + };
  69. + (@arg_builder ($arg_builder:expr) max_values($n:expr) $($tt:tt)*) => {
  70. + clap_matcher!{ @arg_builder ($arg_builder.max_values($n)) $($tt)* }
  71. + };
  72. + (@arg_builder ($arg_builder:expr) index($n:expr) $($tt:tt)*) => {
  73. + clap_matcher!{ @arg_builder ($arg_builder.index($n)) $($tt)* }
  74. + };
  75. + (@arg_builder ($arg_builder:expr) group($n:expr) $($tt:tt)*) => {
  76. + clap_matcher!{ @arg_builder ($arg_builder.group($n)) $($tt)* }
  77. + };
  78. + (@arg_builder ($arg_builder:expr) requires() $($tt:tt)*) => {
  79. + clap_matcher!{ @arg_builder ($arg_builder) $($tt)* }
  80. + };
  81. + (@arg_builder ($arg_builder:expr) requires($require:ident $($tail:ident)*) $($tt:tt)*) => {
  82. + clap_matcher!{ @arg_builder ($arg_builder.requires(stringify!($require))) requires($($tail)*) $($tt)* }
  83. + };
  84. + (@arg_builder ($arg_builder:expr) conflicts() $($tt:tt)*) => {
  85. + clap_matcher!{ @arg_builder ($arg_builder) $($tt)* }
  86. + };
  87. + (@arg_builder ($arg_builder:expr) conflicts($value:ident $($tail:ident)*) $($tt:tt)*) => {
  88. + clap_matcher!{ @arg_builder ($arg_builder.conflicts_with(stringify!($value)))
  89. + conflicts($($tail)*) $($tt)* }
  90. + };
  91. + (@arg_builder ($arg_builder:expr) mutually_overrides() $($tt:tt)*) => {
  92. + clap_matcher!{ @arg_builder ($arg_builder) $($tt)* }
  93. + };
  94. + (@arg_builder ($arg_builder:expr) mutually_overrides($value:ident $($tail:ident)*) $($tt:tt)*) => {
  95. + clap_matcher!{ @arg_builder ($arg_builder.mutually_overrides_with(stringify!($value)))
  96. + mutually_overrides($($tail)*) $($tt)* }
  97. + };
  98. + (@arg_builder ($arg_builder:expr) possible_values() $($tt:tt)*) => {
  99. + clap_matcher!{ @arg_builder ($arg_builder) $($tt)* }
  100. + };
  101. + (@arg_builder ($arg_builder:expr) possible_values($value:ident $($tail:ident)*) $($tt:tt)*) => {
  102. + clap_matcher!{ @arg_builder ($arg_builder.possible_value(stringify!($value)))
  103. + possible_values($($tail)*) $($tt)* }
  104. + };
  105. + (@arg_builder ($arg_builder:expr) {$fn_:expr} $($tt:tt)*) => {
  106. + clap_matcher!{ @arg_builder ($arg_builder.validator($fn_)) $($tt)* }
  107. + };
  108. + (@arg_builder ($arg_builder:expr) $desc:expr) => {
  109. + $arg_builder.help($desc)
  110. + };
  111. +
  112. + ($name:ident => $(($($tt:tt)*))*) => {{
  113. + let _builder = App::new(stringify!($name));
  114. + $( let _builder = clap_matcher!{ @app_builder _builder $($tt)*}; )*
  115. + _builder.get_matches()
  116. + }};
  117. +}
  118.  
  119. fn main() {
  120.  
  121. @@ -34,28 +142,28 @@ fn main() {
  122. // = Uses "-V" or "--version" (full usage "$ myapp test -V" or "$ myapp test --version")
  123. // - A subcommand "help" (automatically generated by clap because we specified a subcommand of our own)
  124. // + Used by "$ myapp help" (same functionality as "-h" or "--help")
  125. - let matches = App::new("MyApp")
  126. - .version("1.0")
  127. - .author("Kevin K. <kbknapp@gmail.com>")
  128. - .about("Does awesome things")
  129. - .arg(Arg::with_name("config")
  130. - .short("c")
  131. - .long("config")
  132. - .help("Sets a custom config file")
  133. - .takes_value(true))
  134. - .arg(Arg::with_name("output")
  135. - .help("Sets an optional output file")
  136. - .index(1))
  137. - .arg(Arg::with_name("debug")
  138. - .short("d")
  139. - .multiple(true)
  140. - .help("Turn debugging information on"))
  141. - .subcommand(SubCommand::with_name("test")
  142. - .about("does testing things")
  143. - .arg(Arg::with_name("list")
  144. - .short("l")
  145. - .help("lists test values")))
  146. - .get_matches();
  147. + let matches = clap_matcher!(MyApp =>
  148. + (setting: SubcommandRequiredElseHelp)
  149. + (version: "1.0")
  150. + (author: "Alice")
  151. + (description: "Does awesome things")
  152. + (@arg config: -c --config <conf> takes_value "Sets a custom config file")
  153. + (@arg output: "Sets an optional output file")
  154. + (@arg debug: -d multiple "Turn debugging information on")
  155. + (@subcommand test =>
  156. + (description: "does testing things")
  157. + (version: "2.5")
  158. + (@arg list: -l "Lists test values")
  159. + (@arg test_req: -r takes_value conflicts(list) "Tests requirement for listing")
  160. + (@arg aaaa: --aaaa takes_value {
  161. + |a| if a.contains("a") {
  162. + Ok(())
  163. + } else {
  164. + Err(String::from("string does not contain at least one a"))
  165. + }
  166. + } "Test if the argument contains an a")
  167. + )
  168. + );
  169.  
  170. // You can check the value provided by positional arguments, or option arguments
  171. if let Some(o) = matches.value_of("output") {
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement