Advertisement
Guest User

Untitled

a guest
Sep 4th, 2015
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.23 KB | None | 0 0
  1. diff --git a/examples/01b_quick_example.rs b/examples/01b_quick_example.rs
  2. index 24dca77..abe089f 100644
  3. --- a/examples/01b_quick_example.rs
  4. +++ b/examples/01b_quick_example.rs
  5. @@ -1,6 +1,117 @@
  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. + (@if_one () ($expr:expr)) => { };
  113. + (@if_one ($value:ident) ($expr:expr)) => { $expr };
  114. +
  115. + ($name:ident => $(($($tt:tt)*))*) => {{
  116. + let _builder = App::new(stringify!($name));
  117. + $( let _builder = clap_matcher!{ @app_builder _builder $($tt)*}; )*
  118. + _builder.get_matches()
  119. + }};
  120. +}
  121.  
  122. fn main() {
  123.  
  124. @@ -34,28 +145,28 @@ fn main() {
  125. // = Uses "-V" or "--version" (full usage "$ myapp test -V" or "$ myapp test --version")
  126. // - A subcommand "help" (automatically generated by clap because we specified a subcommand of our own)
  127. // + Used by "$ myapp help" (same functionality as "-h" or "--help")
  128. - let matches = App::new("MyApp")
  129. - .version("1.0")
  130. - .author("Kevin K. <kbknapp@gmail.com>")
  131. - .about("Does awesome things")
  132. - .arg(Arg::with_name("config")
  133. - .short("c")
  134. - .long("config")
  135. - .help("Sets a custom config file")
  136. - .takes_value(true))
  137. - .arg(Arg::with_name("output")
  138. - .help("Sets an optional output file")
  139. - .index(1))
  140. - .arg(Arg::with_name("debug")
  141. - .short("d")
  142. - .multiple(true)
  143. - .help("Turn debugging information on"))
  144. - .subcommand(SubCommand::with_name("test")
  145. - .about("does testing things")
  146. - .arg(Arg::with_name("list")
  147. - .short("l")
  148. - .help("lists test values")))
  149. - .get_matches();
  150. + let matches = clap_matcher!(MyApp =>
  151. + (setting: SubcommandRequiredElseHelp)
  152. + (version: "1.0")
  153. + (author: "Alice")
  154. + (description: "Does awesome things")
  155. + (@arg config: -c --config <conf> takes_value "Sets a custom config file")
  156. + (@arg output: "Sets an optional output file")
  157. + (@arg debug: -d multiple "Turn debugging information on")
  158. + (@subcommand test =>
  159. + (description: "does testing things")
  160. + (version: "2.5")
  161. + (@arg list: -l "Lists test values")
  162. + (@arg test_req: -r takes_value conflicts(list) "Tests requirement for listing")
  163. + (@arg aaaa: --aaaa takes_value {
  164. + |a| if a.contains("a") {
  165. + Ok(())
  166. + } else {
  167. + Err(String::from("string does not contain at least one a"))
  168. + }
  169. + } "Test if the argument contains an a")
  170. + )
  171. + );
  172.  
  173. // You can check the value provided by positional arguments, or option arguments
  174. if let Some(o) = matches.value_of("output") {
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement