use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct AssetBalance {
pub asset_id: String,
pub amount: u64,
pub confirmed: u64,
pub pending: u64,
}
#[derive(Debug)]
pub struct RGBWallet {
address: String,
assets: HashMap<String, u64>, }
impl RGBWallet {
pub fn new(address: &str) -> Self {
Self {
address: address.to_string(),
assets: HashMap::new(),
}
}
pub fn address(&self) -> &str {
&self.address
}
pub fn add_asset(&mut self, asset_id: &str, amount: u64) {
let current_amount = self.assets.get(asset_id).cloned().unwrap_or(0);
self.assets
.insert(asset_id.to_string(), current_amount + amount);
}
pub fn transfer_asset(&mut self, asset_id: &str, amount: u64) -> Result<(), &'static str> {
let current_amount = self.assets.get(asset_id).cloned().unwrap_or(0);
if current_amount < amount {
return Err("Insufficient funds");
}
self.assets
.insert(asset_id.to_string(), current_amount - amount);
Ok(())
}
pub fn get_balance(&self, asset_id: &str) -> Result<u64, &'static str> {
Ok(self.assets.get(asset_id).cloned().unwrap_or(0))
}
pub fn get_balances(&self) -> Vec<AssetBalance> {
self.assets
.iter()
.map(|(asset_id, amount)| AssetBalance {
asset_id: asset_id.clone(),
amount: *amount,
confirmed: *amount, pending: 0,
})
.collect()
}
}