hermit_toolkit_hmip21/
asset.rs

1use std::fmt;
2
3use cosmwasm_std::HumanAddr;
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6
7#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
8#[serde(rename_all = "snake_case")]
9pub enum AssetInfo {
10    Token {
11        contract_addr: HumanAddr,
12        token_code_hash: String,
13        token_decimal: u32,
14    },
15    NativeToken {
16        denom: String,
17    },
18}
19
20impl fmt::Display for AssetInfo {
21    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
22        match self {
23            AssetInfo::NativeToken { denom } => write!(f, "{}", denom),
24            AssetInfo::Token { contract_addr, .. } => write!(f, "{}", contract_addr),
25        }
26    }
27}
28
29impl AssetInfo {
30    pub fn is_native_token(&self) -> bool {
31        match self {
32            AssetInfo::NativeToken { .. } => true,
33            AssetInfo::Token { .. } => false,
34        }
35    }
36
37    pub fn equal(&self, asset: &AssetInfo) -> bool {
38        match self {
39            AssetInfo::Token { contract_addr, .. } => {
40                let self_contract_addr = contract_addr;
41                match asset {
42                    AssetInfo::Token { contract_addr, .. } => self_contract_addr == contract_addr,
43                    AssetInfo::NativeToken { .. } => false,
44                }
45            }
46            AssetInfo::NativeToken { denom, .. } => {
47                let self_denom = denom;
48                match asset {
49                    AssetInfo::Token { .. } => false,
50                    AssetInfo::NativeToken { denom, .. } => self_denom == denom,
51                }
52            }
53        }
54    }
55}