use crate::SolanaAgentKit;
use solana_client::{client_error::ClientError, rpc_request::TokenAccountsFilter};
use solana_sdk::{native_token::LAMPORTS_PER_SOL, pubkey::Pubkey};
pub async fn get_balance_other(
agent: &SolanaAgentKit,
wallet_address: Pubkey,
token_address: Option<Pubkey>,
) -> Result<f64, ClientError> {
if let Some(token_address) = token_address {
let token_accounts = agent
.connection
.get_token_accounts_by_owner(&wallet_address, TokenAccountsFilter::Mint(token_address))
.expect("get_token_accounts_by_owner");
if token_accounts.is_empty() {
println!("No token accounts found for wallet {} and token {}", wallet_address, token_address);
return Ok(0.0);
}
let lamports = token_accounts[0].account.lamports;
Ok(lamports as f64 / LAMPORTS_PER_SOL as f64)
} else {
let balance = agent.get_balance(Some(wallet_address.to_string())).await?;
Ok(balance)
}
}