diff --git a/.gitignore b/.gitignore index d8f1389c..4828eb46 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ .direnv .vscode/ .idea/ +*.redb +*.sqlite* diff --git a/crates/cdk-cli/src/main.rs b/crates/cdk-cli/src/main.rs index 2faa9c62..ab4f0cbf 100644 --- a/crates/cdk-cli/src/main.rs +++ b/crates/cdk-cli/src/main.rs @@ -40,6 +40,8 @@ const DEFAULT_SQLITE_DB_PATH: &str = "./cashu_tool.sqlite"; enum Commands { /// Decode a token DecodeToken(sub_commands::decode_token::DecodeTokenSubCommand), + /// Balance + Balance, /// Pay bolt11 invoice Melt(sub_commands::melt::MeltSubCommand), /// Receive token @@ -94,6 +96,7 @@ async fn main() -> Result<()> { Commands::DecodeToken(sub_command_args) => { sub_commands::decode_token::decode_token(sub_command_args) } + Commands::Balance => sub_commands::balance::balance(wallet).await, Commands::Melt(sub_command_args) => { sub_commands::melt::melt(wallet, sub_command_args).await } diff --git a/crates/cdk-cli/src/sub_commands/balance.rs b/crates/cdk-cli/src/sub_commands/balance.rs new file mode 100644 index 00000000..6811998d --- /dev/null +++ b/crates/cdk-cli/src/sub_commands/balance.rs @@ -0,0 +1,29 @@ +use std::collections::HashMap; + +use anyhow::Result; +use cdk::nuts::CurrencyUnit; +use cdk::url::UncheckedUrl; +use cdk::wallet::Wallet; +use cdk::Amount; + +pub async fn balance(wallet: Wallet) -> Result<()> { + let _ = mint_balances(&wallet).await; + Ok(()) +} + +pub async fn mint_balances( + wallet: &Wallet, +) -> Result)>> { + let mints_amounts: Vec<(UncheckedUrl, HashMap<_, _>)> = + wallet.mint_balances().await?.into_iter().collect(); + + for (i, (mint, balance)) in mints_amounts.iter().enumerate() { + println!("{i}: {mint}:"); + for (unit, amount) in balance { + println!("- {amount} {unit}"); + } + println!("---------"); + } + + Ok(mints_amounts) +} diff --git a/crates/cdk-cli/src/sub_commands/melt.rs b/crates/cdk-cli/src/sub_commands/melt.rs index 4e207ad8..23f52a6c 100644 --- a/crates/cdk-cli/src/sub_commands/melt.rs +++ b/crates/cdk-cli/src/sub_commands/melt.rs @@ -1,4 +1,3 @@ -use std::collections::HashMap; use std::io::Write; use std::str::FromStr; use std::{io, println}; @@ -6,21 +5,17 @@ use std::{io, println}; use anyhow::{bail, Result}; use cdk::amount::SplitTarget; use cdk::nuts::CurrencyUnit; -use cdk::url::UncheckedUrl; use cdk::wallet::Wallet; use cdk::Bolt11Invoice; use clap::Args; +use crate::sub_commands::balance::mint_balances; + #[derive(Args)] pub struct MeltSubCommand {} pub async fn melt(wallet: Wallet, _sub_command_args: &MeltSubCommand) -> Result<()> { - let mints_amounts: Vec<(UncheckedUrl, HashMap<_, _>)> = - wallet.mint_balances().await?.into_iter().collect(); - - for (i, (mint, amount)) in mints_amounts.iter().enumerate() { - println!("{}: {}, {:?} sats", i, mint, amount); - } + let mints_amounts = mint_balances(&wallet).await?; println!("Enter mint number to create token"); diff --git a/crates/cdk-cli/src/sub_commands/mod.rs b/crates/cdk-cli/src/sub_commands/mod.rs index c11bc139..6255c9ba 100644 --- a/crates/cdk-cli/src/sub_commands/mod.rs +++ b/crates/cdk-cli/src/sub_commands/mod.rs @@ -1,3 +1,4 @@ +pub mod balance; pub mod check_spent; pub mod decode_token; pub mod melt; diff --git a/crates/cdk-cli/src/sub_commands/send.rs b/crates/cdk-cli/src/sub_commands/send.rs index f359e338..fe7bd324 100644 --- a/crates/cdk-cli/src/sub_commands/send.rs +++ b/crates/cdk-cli/src/sub_commands/send.rs @@ -1,4 +1,3 @@ -use std::collections::HashMap; use std::io::Write; use std::str::FromStr; use std::{io, println}; @@ -6,11 +5,12 @@ use std::{io, println}; use anyhow::{bail, Result}; use cdk::amount::SplitTarget; use cdk::nuts::{Conditions, CurrencyUnit, PublicKey, SpendingConditions}; -use cdk::url::UncheckedUrl; use cdk::wallet::Wallet; use cdk::Amount; use clap::Args; +use crate::sub_commands::balance::mint_balances; + #[derive(Args)] pub struct SendSubCommand { /// Token Memo @@ -34,12 +34,7 @@ pub struct SendSubCommand { } pub async fn send(wallet: Wallet, sub_command_args: &SendSubCommand) -> Result<()> { - let mints_amounts: Vec<(UncheckedUrl, HashMap<_, _>)> = - wallet.mint_balances().await?.into_iter().collect(); - - for (i, (mint, amount)) in mints_amounts.iter().enumerate() { - println!("{}: {}, {:?} sats", i, mint, amount); - } + let mints_amounts = mint_balances(&wallet).await?; println!("Enter mint number to create token");