diff --git a/common/commands/src/coconut/import_ticket_book.rs b/common/commands/src/coconut/import_ticket_book.rs index 852f94e34a..2edf281a04 100644 --- a/common/commands/src/coconut/import_ticket_book.rs +++ b/common/commands/src/coconut/import_ticket_book.rs @@ -9,9 +9,17 @@ use nym_credential_storage::initialise_persistent_storage; use nym_id::import_credential; use std::fs; use std::path::PathBuf; +use std::str::FromStr; -fn parse_encoded_credential_data(raw: &str) -> bs58::decode::Result> { - bs58::decode(raw).into_vec() +#[derive(Debug, Clone)] +pub struct CredentialDataWrapper(Vec); + +impl FromStr for CredentialDataWrapper { + type Err = bs58::decode::Error; + + fn from_str(s: &str) -> Result { + bs58::decode(s).into_vec().map(CredentialDataWrapper) + } } #[derive(Debug, Parser)] @@ -22,8 +30,8 @@ pub struct Args { pub(crate) client_config: PathBuf, /// Explicitly provide the encoded credential data (as base58) - #[clap(long, group = "cred_data", value_parser = parse_encoded_credential_data)] - pub(crate) credential_data: Option>, + #[clap(long, group = "cred_data")] + pub(crate) credential_data: Option, /// Specifies the path to file containing binary credential data #[clap(long, group = "cred_data")] @@ -52,7 +60,7 @@ pub async fn execute(args: Args) -> anyhow::Result<()> { let credentials_store = initialise_persistent_storage(credentials_store).await; let raw_credential = match args.credential_data { - Some(data) => data, + Some(data) => data.0, None => { // SAFETY: one of those arguments must have been set fs::read(args.credential_path.unwrap())?