Skip to content

Commit

Permalink
im(arg_enum): allows ascii case insensitivity for enum variants
Browse files Browse the repository at this point in the history
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
  • Loading branch information
kbknapp committed May 5, 2015
1 parent 632c89b commit b249f96
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -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),
Expand Down Expand Up @@ -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
///
///
Expand Down Expand Up @@ -369,13 +371,15 @@ macro_rules! arg_enum {
type Err = String;

fn from_str(s: &str) -> Result<Self,Self::Err> {
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)[..]
}))
Expand Down

0 comments on commit b249f96

Please sign in to comment.