feat(cli): balance

This commit is contained in:
thesimplekid
2024-06-09 11:24:32 +01:00
parent 4244053330
commit bfc737f2f5
6 changed files with 41 additions and 16 deletions

2
.gitignore vendored
View File

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

View File

@@ -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
}

View File

@@ -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)
}

View File

@@ -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");

View File

@@ -1,3 +1,4 @@
pub mod balance;
pub mod check_spent;
pub mod decode_token;
pub mod melt;

View File

@@ -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");