[][src]Derive Macro arg_enum_proc_macro::ArgEnum

#[derive(ArgEnum)]

Implement std::fmt::Display, std::str::FromStr and variants().

The invocation:

use arg_enum_proc_macro::ArgEnum;

#[derive(ArgEnum)]
enum Foo {
    A,
    B
}

produces:

enum Foo {
    A,
    B
}
impl ::std::str::FromStr for Foo {
    type Err = String;

    fn from_str(s: &str) -> ::std::result::Result<Self,Self::Err> {
        match s {
            "A" | _ if s.eq_ignore_ascii_case("A") => Ok(Foo::A),
            "B" | _ if s.eq_ignore_ascii_case("B") => Ok(Foo::B),
            _ => Err({
                let v = vec![ "A", "B" ];
                format!("valid values: {}", v.join(" ,"))
            }),
        }
    }
}
impl ::std::fmt::Display for Foo {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        match *self {
            Foo::A => write!(f, "A"),
            Foo::B => write!(f, "B"),
        }
    }
}

impl Foo {
    #[allow(dead_code)]
    pub fn variants() -> [&'static str; 2] {
        [ "A", "B" ]
    }
}