aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2020-01-07 23:44:17 +0000
committerDaniel Mueller <deso@posteo.net>2020-01-08 09:52:23 -0800
commit447870f5e8d70c5be3bba2d7e866bf26420b1260 (patch)
treee47ee150c4658e00f5d6dacc2a7b050cf3afee60
parent75b752fcb1bb9b4403d7fe2c8874996eb572b460 (diff)
downloadnitrocli-447870f5e8d70c5be3bba2d7e866bf26420b1260.tar.gz
nitrocli-447870f5e8d70c5be3bba2d7e866bf26420b1260.tar.bz2
Add all_str function to enums generated by Enum! macro
To make it easier to list all possible values for a command-line option mapped to an enum, we add the all_str function to the Enum! macro that returns an array of the string representations of all variants. We also use this new function to simplify the generation of the error message in the FromStr implementation in Enum!.
-rw-r--r--nitrocli/src/arg_util.rs15
1 files changed, 10 insertions, 5 deletions
diff --git a/nitrocli/src/arg_util.rs b/nitrocli/src/arg_util.rs
index 15ab730..cb75c52 100644
--- a/nitrocli/src/arg_util.rs
+++ b/nitrocli/src/arg_util.rs
@@ -83,6 +83,15 @@ macro_rules! enum_int {
)*
]
}
+
+ #[allow(unused)]
+ pub fn all_str() -> [&'static str; count!($($var),*)] {
+ [
+ $(
+ $str,
+ )*
+ ]
+ }
}
impl ::std::convert::AsRef<str> for $name {
@@ -112,11 +121,7 @@ macro_rules! enum_int {
_ => Err(
format!(
"expected one of {}",
- $name::all_variants()
- .iter()
- .map(::std::convert::AsRef::as_ref)
- .collect::<::std::vec::Vec<_>>()
- .join(", "),
+ $name::all_str().join(", "),
)
)
}