aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2020-01-08 11:35:19 +0000
committerDaniel Mueller <deso@posteo.net>2020-01-08 09:53:46 -0800
commit72a31d38d6e719b337d23e3a73a5050bc9221d1c (patch)
tree0d70f059e25d21d74b764a16a8b432097e7e57b1
parent88f3682b5930acf07788a0796b5a9c08004c7fd3 (diff)
downloadnitrocli-72a31d38d6e719b337d23e3a73a5050bc9221d1c.tar.gz
nitrocli-72a31d38d6e719b337d23e3a73a5050bc9221d1c.tar.bz2
Handle doc comments and empty variants in the Command! macro
This patch introduces two changes to the Command! macro: - We allow variants without fields so that we no longer have to define empty *Args structs just for the Command! macro. - We allow doc comments so that we can document commands without a separate *Args struct.
-rw-r--r--nitrocli/src/arg_util.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/nitrocli/src/arg_util.rs b/nitrocli/src/arg_util.rs
index cb75c52..bc1c02c 100644
--- a/nitrocli/src/arg_util.rs
+++ b/nitrocli/src/arg_util.rs
@@ -24,12 +24,21 @@ macro_rules! count {
}
}
+/// Translate an optional source into an optional destination.
+macro_rules! tr {
+ ($dst:tt, $src:tt) => {
+ $dst
+ };
+ ($dst:tt) => {};
+}
+
macro_rules! Command {
- ( $name:ident, [ $( $var:ident($inner:ident) => $exec:expr, ) *] ) => {
+ ( $name:ident, [ $( $(#[$doc:meta])* $var:ident$(($inner:ty))? => $exec:expr, ) *] ) => {
#[derive(Debug, PartialEq, structopt::StructOpt)]
pub enum $name {
$(
- $var($inner),
+ $(#[$doc])*
+ $var$(($inner))?,
)*
}
@@ -41,7 +50,7 @@ macro_rules! Command {
) -> crate::Result<()> {
match self {
$(
- $name::$var(args) => $exec(ctx, args),
+ $name::$var$((tr!(args, $inner)))? => $exec(ctx $(,tr!(args, $inner))?),
)*
}
}