use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::math::Uint128;
#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, JsonSchema)]
pub struct Coin {
pub denom: String,
pub amount: Uint128,
}
impl Coin {
pub fn new(amount: u128, denom: &str) -> Self {
Coin {
amount: Uint128(amount),
denom: denom.to_string(),
}
}
}
pub fn coins(amount: u128, denom: &str) -> Vec<Coin> {
vec![coin(amount, denom)]
}
pub fn coin(amount: u128, denom: &str) -> Coin {
Coin::new(amount, denom)
}
pub fn has_coins(coins: &[Coin], required: &Coin) -> bool {
coins
.iter()
.find(|c| c.denom == required.denom)
.map(|m| m.amount >= required.amount)
.unwrap_or(false)
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn has_coins_matches() {
let wallet = vec![coin(12345, "ETH"), coin(555, "BTC")];
assert!(has_coins(&wallet, &coin(777, "ETH")));
}
}