use eyre::Result;
use crate::output::OutputFormat;
#[derive(Debug, clap::Subcommand)]
pub enum BuidlCommand {
ListTransfers {
#[arg(long, required = true)]
wallet_id: String,
#[arg(long)]
from: Option<String>,
#[arg(long)]
to: Option<String>,
#[arg(long)]
page_size: Option<u32>,
},
GetTransfer {
id: String,
},
ListUserOps {
#[arg(long)]
wallet_id: Option<String>,
#[arg(long)]
page_size: Option<u32>,
},
GetUserOp {
id: String,
},
ListWalletBalances {
#[arg(long)]
wallet_id: String,
#[arg(long)]
page_size: Option<u32>,
},
ListWalletNfts {
#[arg(long)]
wallet_id: String,
#[arg(long)]
page_size: Option<u32>,
},
}
pub(crate) async fn run(
cmd: BuidlCommand,
api_key: &str,
base_url: &str,
output: OutputFormat,
) -> Result<()> {
let client = circle_buidl_wallets::BuidlWalletsClient::with_base_url(api_key, base_url);
match cmd {
BuidlCommand::ListTransfers { wallet_id, from, to, page_size } => {
use circle_buidl_wallets::models::{common::PageParams, transfer::ListTransfersParams};
let params = ListTransfersParams {
wallet_addresses: Some(wallet_id),
page: PageParams { from, to, page_size, ..Default::default() },
..Default::default()
};
let result = client.list_transfers(¶ms).await.map_err(|e| eyre::eyre!("{e}"))?;
crate::output::print_result(&result, output);
Ok(())
}
BuidlCommand::GetTransfer { id } => {
let result = client.get_transfer(&id).await.map_err(|e| eyre::eyre!("{e}"))?;
crate::output::print_result(&result, output);
Ok(())
}
BuidlCommand::ListUserOps { wallet_id, page_size } => {
use circle_buidl_wallets::models::{common::PageParams, user_op::ListUserOpsParams};
let params = ListUserOpsParams {
senders: wallet_id,
page: PageParams { page_size, ..Default::default() },
..Default::default()
};
let result = client.list_user_ops(¶ms).await.map_err(|e| eyre::eyre!("{e}"))?;
crate::output::print_result(&result, output);
Ok(())
}
BuidlCommand::GetUserOp { id } => {
let result = client.get_user_op(&id).await.map_err(|e| eyre::eyre!("{e}"))?;
crate::output::print_result(&result, output);
Ok(())
}
BuidlCommand::ListWalletBalances { wallet_id, page_size } => {
use circle_buidl_wallets::models::{
common::PageParams, wallet::ListWalletBalancesParams,
};
let params = ListWalletBalancesParams {
page: PageParams { page_size, ..Default::default() },
..Default::default()
};
let result = client
.list_wallet_balances_by_id(&wallet_id, ¶ms)
.await
.map_err(|e| eyre::eyre!("{e}"))?;
crate::output::print_result(&result, output);
Ok(())
}
BuidlCommand::ListWalletNfts { wallet_id, page_size } => {
use circle_buidl_wallets::models::{common::PageParams, wallet::ListWalletNftsParams};
let params = ListWalletNftsParams {
page: PageParams { page_size, ..Default::default() },
..Default::default()
};
let result = client
.list_wallet_nfts_by_id(&wallet_id, ¶ms)
.await
.map_err(|e| eyre::eyre!("{e}"))?;
crate::output::print_result(&result, output);
Ok(())
}
}
}