Macro clapi::app[][src]

macro_rules! app {
    (=> $($rest : tt) *) => { ... };
    ($command_name : ident => $($rest : tt) *) => { ... };
    ($command_name : expr => $($rest : tt) *) => { ... };
    (@ command($builder : expr)) => { ... };
    (@ command($builder : expr) (description => $description : expr) $($tt : tt)
 *) => { ... };
    (@ command($builder : expr) (usage => $usage : expr) $($tt : tt) *) => { ... };
    (@ command($builder : expr) (help => $help : expr) $($tt : tt) *) => { ... };
    (@ command($builder : expr) (version => $version : expr) $($tt : tt) *) => { ... };
    (@ command($builder : expr) (hidden => $hidden : expr) $($tt : tt) *) => { ... };
    (@ command($builder : expr)
 (handler($options : ident, $arguments : ident) => $block : block) $($tt : tt)
 *) => { ... };
    (@ command($builder : expr)
 (handler($options : ident, $arguments : ident) => $expr : expr) $($tt : tt)
 *) => { ... };
    (@ command($builder : expr)
 (handler(... $($arg_name : ident : $arg_type : ty), +) => $block : block)
 $($tt : tt) *) => { ... };
    (@ command($builder : expr)
 (handler(... $($arg_name : ident : $arg_type : ty), +) => $expr : expr)
 $($tt : tt) *) => { ... };
    (@ command($builder : expr)
 (handler($($name : ident : $ty : ty), +
          $(, ... $($arg_name : ident : $arg_type : ty), +) ?) => $block :
  block) $($tt : tt) *) => { ... };
    (@ command($builder : expr)
 (handler($($name : ident : $ty : ty), +
          $(, ... $($arg_name : ident : $arg_type : ty), +) ?) => $expr :
  expr) $($tt : tt) *) => { ... };
    (@ command($builder : expr) (handler() => $block : block) $($tt : tt) *) => { ... };
    (@ command($builder : expr) (handler() => $expr : expr) $($tt : tt) *) => { ... };
    (@ command($builder : expr) (handler => $block : block) $($tt : tt) *) => { ... };
    (@ command($builder : expr) (handler => $expr : expr) $($tt : tt) *) => { ... };
    (@ command($builder : expr)
 (@ subcommand $command_name : ident $(=> $($rest : tt) +) ?) $($tt : tt) *) => { ... };
    (@ command($builder : expr)
 (@ subcommand $command_name : expr $(=> $($rest : tt) +) ?) $($tt : tt) *) => { ... };
    (@ command($builder : expr)
 (@ option $option_name : ident $(=> $($rest : tt) +) ?) $($tt : tt) *) => { ... };
    (@ command($builder : expr)
 (@ option $option_name : expr $(=> $($rest : tt) +) ?) $($tt : tt) *) => { ... };
    (@ option($option_builder : expr)) => { ... };
    (@ option($option_builder : expr)
 (@ arg $arg_name : ident $(=> $($rest : tt) +) ?) $($tt : tt) *) => { ... };
    (@ option($option_builder : expr)
 (@ arg $arg_name : expr $(=> $($rest : tt) +) ?) $($tt : tt) *) => { ... };
    (@ option($option_builder : expr) (@ arg $(=> $($rest : tt) +) ?) $($tt : tt)
 *) => { ... };
    (@ option($option_builder : expr) (description => $description : expr)
 $($tt : tt) *) => { ... };
    (@ option($option_builder : expr) (required => $required : expr) $($tt : tt)
 *) => { ... };
    (@ option($option_builder : expr) (multiple => $multiple : expr) $($tt : tt)
 *) => { ... };
    (@ option($option_builder : expr) (hidden => $hidden : expr) $($tt : tt) *) => { ... };
    (@ option($option_builder : expr) (requires_assign => $requires_assign : expr)
 $($tt : tt) *) => { ... };
    (@ option($option_builder : expr) (alias => $($alias : expr), +) $($tt : tt)
 *) => { ... };
    (@ command($builder : expr) (@ arg $arg_name : ident $(=> $($rest : tt) +) ?)
 $($tt : tt) *) => { ... };
    (@ command($builder : expr) (@ arg $arg_name : expr $(=> $($rest : tt) +) ?)
 $($tt : tt) *) => { ... };
    (@ arg($arg_builder : expr)) => { ... };
    (@ arg($arg_builder : expr) (count => $count : expr) $($tt : tt) *) => { ... };
    (@ arg($arg_builder : expr) (description => $description : expr) $($tt : tt)
 *) => { ... };
    (@ arg($arg_builder : expr) (values => $($valid_values : expr), +) $($tt : tt)
 *) => { ... };
    (@ arg($arg_builder : expr) (default => $($default_values : expr), +)
 $($tt : tt) *) => { ... };
    (@ arg($arg_builder : expr) (validator => $validator : expr) $($tt : tt) *) => { ... };
    (@ arg($arg_builder : expr) (type => $ty : ty) $($tt : tt) *) => { ... };
    (@ arg($arg_builder : expr) (error => $error : expr) $($tt : tt) *) => { ... };
    (@ @ command => $($rest : tt) +) => { ... };
    (@ @ command $command_name : ident => $($rest : tt) +) => { ... };
    (@ @ command $command_name : expr => $($rest : tt) +) => { ... };
}
Expand description

Constructs a CommandLine app.

You use the @subcommand, @option and @arg tags to create subcommand, option and args respectively. A list of the tags and its properties:

  • @subcommand : description, usage, help, handler, hidden, @subcommand, @option and @arg.
  • @option : description, alias, required, multiple, requires_assign and @arg.
  • @arg : description, values, default, count, validator and type,

Usage

To create the app start with:

  • clapi::app! { => ... }
  • clapi::app! { AppName => ... }
  • clapi::app! { "AppName" => ... }

This is the root of the app where all the tags and properties are declared, these are declared as (property => value).

  • For example:
clapi::app! { MyApp =>
    (description => "This is an app")
};

And the tags like @subcommand, @option and @arg, must contain a name either as an identifier or string literal for example:

  • (@subcommand version => ...)
  • (@option "enable" => ...)

Each tag contains its own properties, check the list above.

Example

clapi::app!{ MyApp =>
    (description => "App to sum values")
    (usage => "USAGE: \n command [--times] <values...>")
    (@arg values =>
        (count => 1..)
        (type => i64)
    )
    (@option times =>
        (description => "Number of times to sum the values")
        (@arg =>
            (type => u64)
            (default => 1)
        )
    )
    (handler (times: u64, ...values: Vec<i64>) => {
        let times = times as i64;
        let total : i64 = values.iter().sum();
        println!("{}", total * times);
    })
};