cdk-cli 0.18.0-rc.0

Cashu cli wallet built on CDK
use std::str::FromStr;

use anyhow::Result;
use cdk::nuts::Token;
use cdk::util::serialize_to_cbor_diag;
use clap::Args;

use crate::terminal::escape_control;

#[derive(Args)]
pub struct DecodeTokenSubCommand {
    /// Cashu Token
    token: String,
}

pub fn decode_token(sub_command_args: &DecodeTokenSubCommand) -> Result<()> {
    let token = Token::from_str(&sub_command_args.token)?;

    // Token contents (unit, memo, secrets) are attacker-controlled; escape
    // control characters before printing.
    println!("{:}", escape_control(&serialize_to_cbor_diag(&token)?));
    Ok(())
}