From b249f9657c6921c004764bd80d13ebca81585eec Mon Sep 17 00:00:00 2001 From: Kevin K Date: Tue, 5 May 2015 12:33:02 -0400 Subject: [PATCH] im(arg_enum): allows ascii case insensitivity for enum variants Allows creating an enum with CamelCase to follow Rust guidelines, but then will match ascii case insensitive. This means variant SomeEnum::Emacs would match string "emacs". Closes #104 --- src/macros.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index 2d305a6c..60d96645 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -227,7 +227,7 @@ macro_rules! value_t_or_exit { match v.parse::<$t>() { Ok(val) => val, Err(e) => { - println!("{} isn't a valid {}\n{}\n{}\nPlease re-run with --help for \ + println!("{} isn't a valid {}\n\t{}\n{}\nPlease re-run with --help for \ more information", v, stringify!($t), @@ -254,7 +254,7 @@ macro_rules! value_t_or_exit { match pv.parse::<$t>() { Ok(rv) => tmp.push(rv), Err(_) => { - println!("{} isn't a valid {}\n{}\nPlease re-run with --help for more \ + println!("{} isn't a valid {}\n\t{}\nPlease re-run with --help for more \ information", pv, stringify!($t), @@ -330,6 +330,8 @@ macro_rules! simple_enum { /// Convenience macro to generate more complete enums with variants to be used as a type when /// parsing arguments. /// +/// **NOTE:** Case insensitivity is supported for ASCII characters +/// /// These enums support pub (or not) and use of the #[derive()] traits /// /// @@ -369,13 +371,15 @@ macro_rules! arg_enum { type Err = String; fn from_str(s: &str) -> Result { + use ::std::ascii::AsciiExt; match s { - $(stringify!($v) => Ok($e::$v),)+ + $(stringify!($v) | + _ if s.eq_ignore_ascii_case(stringify!($v)) => Ok($e::$v),)+ _ => Err({ let v = vec![ $(stringify!($v),)+ ]; - format!("valid:{}", + format!("valid values:{}", v.iter().fold(String::new(), |a, i| { a + &format!(" {}", i)[..] }))