hermit_toolkit_hmip21/
asset.rs1use 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}