Macro clap::arg_enum [−][src]
macro_rules! arg_enum { (@ as_item $($i : item) *) => { ... }; (@ impls($($tts : tt) *) -> ($e : ident, $($v : ident), +)) => { ... }; ($(#[$($m : meta), +]) + pub enum $e : ident { $($v : ident $(= $val : expr) *,) + }) => { ... }; ($(#[$($m : meta), +]) + pub enum $e : ident { $($v : ident $(= $val : expr) *), + }) => { ... }; ($(#[$($m : meta), +]) + enum $e : ident { $($v : ident $(= $val : expr) *,) + }) => { ... }; ($(#[$($m : meta), +]) + enum $e : ident { $($v : ident $(= $val : expr) *), + }) => { ... }; (pub enum $e : ident { $($v : ident $(= $val : expr) *,) + }) => { ... }; (pub enum $e : ident { $($v : ident $(= $val : expr) *), + }) => { ... }; (enum $e : ident { $($v : ident $(= $val : expr) *,) + }) => { ... }; (enum $e : ident { $($v : ident $(= $val : expr) *), + }) => { ... }; }
Expand description
Convenience macro to generate more complete enums with variants to be used as a type when
parsing arguments. This enum also provides a variants()
function which can be used to
retrieve a Vec<&'static str>
of the variant names, as well as implementing FromStr
and
Display
automatically.
NOTE: Case insensitivity is supported for ASCII characters only. It’s highly recommended to
use Arg::case_insensitive(true)
for args that will be used with these enums
NOTE: This macro automatically implements std::str::FromStr
and std::fmt::Display
NOTE: These enums support pub (or not) and uses of the #[derive()]
traits
Examples
arg_enum!{ #[derive(PartialEq, Debug)] pub enum Foo { Bar, Baz, Qux } } // Foo enum can now be used via Foo::Bar, or Foo::Baz, etc // and implements std::str::FromStr to use with the value_t! macros fn main() { let m = App::new("app") .arg(Arg::from_usage("<foo> 'the foo'") .possible_values(&Foo::variants()) .case_insensitive(true)) .get_matches_from(vec![ "app", "baz" ]); let f = value_t!(m, "foo", Foo).unwrap_or_else(|e| e.exit()); assert_eq!(f, Foo::Baz); }