aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arg_util.rs31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/arg_util.rs b/src/arg_util.rs
index 6d1bc50..317d9e3 100644
--- a/src/arg_util.rs
+++ b/src/arg_util.rs
@@ -33,9 +33,34 @@ macro_rules! Command {
)*
}
- enum_int! {$name, [
- $( $var => $str, )*
- ]}
+ impl ::std::convert::AsRef<str> for $name {
+ fn as_ref(&self) -> &'static str {
+ match *self {
+ $(
+ $name::$var => $str,
+ )*
+ }
+ }
+ }
+
+ impl ::std::fmt::Display for $name {
+ fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
+ write!(f, "{}", self.as_ref())
+ }
+ }
+
+ impl ::std::str::FromStr for $name {
+ type Err = &'static str;
+
+ fn from_str(s: &str) -> ::std::result::Result<Self, Self::Err> {
+ match s {
+ $(
+ $str => Ok($name::$var),
+ )*
+ _ => Err("[error]"),
+ }
+ }
+ }
#[allow(unused_qualifications)]
impl $name {