summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2020-01-07 11:51:11 +0000
committerDaniel Mueller <deso@posteo.net>2020-01-07 11:51:11 +0000
commitbf6dd8ec388512f5e56b888fb0407f6e83f604c5 (patch)
tree84e3b3442968f21331a2de5dcaf52bd6b3e742c9 /src
parent31fffa2fe2ad77215be285ab963d0c3565b32ff2 (diff)
downloadnitrocli-bf6dd8ec388512f5e56b888fb0407f6e83f604c5.tar.gz
nitrocli-bf6dd8ec388512f5e56b888fb0407f6e83f604c5.tar.bz2
Refactor the Enum! macro into Enum! and Command!
For an easier transition to structopt, this patch splits the two cases of the Enum! macro into two separate macros (that internally both call the new enum_int! macro).
Diffstat (limited to 'src')
-rw-r--r--src/arg_util.rs32
-rw-r--r--src/args.rs18
2 files changed, 34 insertions, 16 deletions
diff --git a/src/arg_util.rs b/src/arg_util.rs
index e2e7b1d..56f8758 100644
--- a/src/arg_util.rs
+++ b/src/arg_util.rs
@@ -1,7 +1,7 @@
// arg_util.rs
// *************************************************************************
-// * Copyright (C) 2019 Daniel Mueller (deso@posteo.net) *
+// * Copyright (C) 2019-2020 Daniel Mueller (deso@posteo.net) *
// * *
// * This program is free software: you can redistribute it and/or modify *
// * it under the terms of the GNU General Public License as published by *
@@ -24,13 +24,16 @@ macro_rules! count {
}
}
-/// A macro for generating an enum with a set of simple (i.e., no
-/// parameters) variants and their textual representations.
-// TODO: Right now we hard code the derives we create. We may want to
-// make this set configurable.
-macro_rules! Enum {
+macro_rules! Command {
( $name:ident, [ $( $var:ident => ($str:expr, $exec:expr), ) *] ) => {
- Enum! {$name, [
+ #[derive(Debug, PartialEq)]
+ pub enum $name {
+ $(
+ $var,
+ )*
+ }
+
+ enum_int! {$name, [
$( $var => $str, )*
]}
@@ -49,6 +52,13 @@ macro_rules! Enum {
}
}
};
+}
+
+/// A macro for generating an enum with a set of simple (i.e., no
+/// parameters) variants and their textual representations.
+// TODO: Right now we hard code the derives we create. We may want to
+// make this set configurable.
+macro_rules! Enum {
( $name:ident, [ $( $var:ident => $str:expr, ) *] ) => {
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum $name {
@@ -57,6 +67,14 @@ macro_rules! Enum {
)*
}
+ enum_int! {$name, [
+ $( $var => $str, )*
+ ]}
+ };
+}
+
+macro_rules! enum_int {
+ ( $name:ident, [ $( $var:ident => $str:expr, ) *] ) => {
impl $name {
#[allow(unused)]
pub fn all(&self) -> [$name; count!($($var),*) ] {
diff --git a/src/args.rs b/src/args.rs
index 9f4cae2..0c8feb3 100644
--- a/src/args.rs
+++ b/src/args.rs
@@ -1,7 +1,7 @@
// args.rs
// *************************************************************************
-// * Copyright (C) 2018-2019 Daniel Mueller (deso@posteo.net) *
+// * Copyright (C) 2018-2020 Daniel Mueller (deso@posteo.net) *
// * *
// * This program is free software: you can redistribute it and/or modify *
// * it under the terms of the GNU General Public License as published by *
@@ -128,7 +128,7 @@ impl From<DeviceModel> for nitrokey::Model {
/// A top-level command for nitrocli.
#[allow(unused_doc_comments)]
-Enum! {Command, [
+Command! {Command, [
Config => ("config", config),
Encrypted => ("encrypted", encrypted),
Hidden => ("hidden", hidden),
@@ -141,7 +141,7 @@ Enum! {Command, [
Unencrypted => ("unencrypted", unencrypted),
]}
-Enum! {ConfigCommand, [
+Command! {ConfigCommand, [
Get => ("get", config_get),
Set => ("set", config_set),
]}
@@ -181,7 +181,7 @@ impl<T> ConfigOption<T> {
}
}
-Enum! {OtpCommand, [
+Command! {OtpCommand, [
Clear => ("clear", otp_clear),
Get => ("get", otp_get),
Set => ("set", otp_set),
@@ -213,13 +213,13 @@ Enum! {OtpSecretFormat, [
Hex => "hex",
]}
-Enum! {PinCommand, [
+Command! {PinCommand, [
Clear => ("clear", pin_clear),
Set => ("set", pin_set),
Unblock => ("unblock", pin_unblock),
]}
-Enum! {PwsCommand, [
+Command! {PwsCommand, [
Clear => ("clear", pws_clear),
Get => ("get", pws_get),
Set => ("set", pws_set),
@@ -257,7 +257,7 @@ fn reset(ctx: &mut ExecCtx<'_>, args: Vec<String>) -> Result<()> {
commands::reset(ctx)
}
-Enum! {UnencryptedCommand, [
+Command! {UnencryptedCommand, [
Set => ("set", unencrypted_set),
]}
@@ -314,7 +314,7 @@ fn unencrypted_set(ctx: &mut ExecCtx<'_>, args: Vec<String>) -> Result<()> {
commands::unencrypted_set(ctx, mode)
}
-Enum! {EncryptedCommand, [
+Command! {EncryptedCommand, [
Close => ("close", encrypted_close),
Open => ("open", encrypted_open),
]}
@@ -364,7 +364,7 @@ fn encrypted_close(ctx: &mut ExecCtx<'_>, args: Vec<String>) -> Result<()> {
commands::encrypted_close(ctx)
}
-Enum! {HiddenCommand, [
+Command! {HiddenCommand, [
Close => ("close", hidden_close),
Create => ("create", hidden_create),
Open => ("open", hidden_open),