Browse Source

feat(cli): balance

thesimplekid 10 months ago
parent
commit
bfc737f2f5

+ 2 - 0
.gitignore

@@ -3,3 +3,5 @@
 .direnv
 .vscode/
 .idea/
+*.redb
+*.sqlite*

+ 3 - 0
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
         }

+ 29 - 0
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<Vec<(UncheckedUrl, HashMap<CurrencyUnit, Amount>)>> {
+    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)
+}

+ 3 - 8
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");
 

+ 1 - 0
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;

+ 3 - 8
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");