diff --git a/Cargo.lock b/Cargo.lock index dc959cf6c68125eab1e3e61444f9e855a2a02c82..733c0a92ed110cb667ca6caebdbfc99ebcfcb951 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1031,6 +1031,7 @@ name = "durs-core" version = "0.3.0-dev" dependencies = [ "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", "clear_on_drop 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "dubp-currency-params 0.2.0", diff --git a/lib/core/core/Cargo.toml b/lib/core/core/Cargo.toml index b8bc60d018df9bac5cf9f39a5a8b1962adfdf1b1..b32dd51d5ce6c0fa9ed766314ead4c0e4442c5c2 100644 --- a/lib/core/core/Cargo.toml +++ b/lib/core/core/Cargo.toml @@ -11,6 +11,7 @@ path = "src/lib.rs" [dependencies] chrono = "0.4" +clap = "2.33.0" clear_on_drop = "0.2.3" dirs = "2.0.2" durs-bc = { path = "../../modules/blockchain/blockchain" } diff --git a/lib/core/core/src/commands/keys.rs b/lib/core/core/src/commands/keys.rs index b67fef8e3cb472b4d5e241187f222ff9dac21715..8bf320f9a0182d0df4581467fb4823bd22a2d020 100644 --- a/lib/core/core/src/commands/keys.rs +++ b/lib/core/core/src/commands/keys.rs @@ -18,6 +18,7 @@ use crate::commands::DursExecutableCoreCommand; use crate::errors::DursCoreError; use crate::DursCore; +use clap::arg_enum; use clear_on_drop::clear::Clear; use durs_conf::keys::*; use durs_conf::DuRsConf; @@ -91,20 +92,33 @@ pub enum ModifySubCommand { NetworkSaltPassword(SaltPasswordOpt), } +arg_enum! { + /// KeyKind + #[derive(Debug, Copy, Clone, PartialEq)] + enum KeyKind { + MEMBER, + NETWORK, + ALL, + } +} + +impl KeyKind { + /// Returns if key kind is member + pub fn is_member(self) -> bool { + self == KeyKind::MEMBER || self == KeyKind::ALL + } + /// Returns if key kind is network + pub fn is_network(self) -> bool { + self == KeyKind::NETWORK || self == KeyKind::ALL + } +} + #[derive(StructOpt, Debug, Copy, Clone)] /// ClearOpt pub struct ClearOpt { - #[structopt(short = "m", long = "member")] - /// True if we change member key - pub member: bool, - - #[structopt(short = "n", long = "network")] - /// True if we change network key - pub network: bool, - - #[structopt(short = "a", long = "all")] - /// True if we change member and network key - pub all: bool, + /// Key to clear + #[structopt(possible_values = &KeyKind::variants(), case_insensitive = true)] + key: KeyKind, } #[derive(StructOpt, Debug, Clone)] @@ -169,8 +183,8 @@ impl DursExecutableCoreCommand for KeysOpt { }, KeysSubCommand::Clear(clear_opt) => { let new_keypairs = clear_keys( - clear_opt.network || clear_opt.all, - clear_opt.member || clear_opt.all, + clear_opt.key.is_network(), + clear_opt.key.is_member(), keypairs, ); save_keypairs(profile_path, &keypairs_file, new_keypairs)