1use cosmwasm_schema::cw_serde;
2use cosmwasm_std::{Addr, Deps, StdResult, Uint128};
3
4use crate::{Cw20QueryMsg, TokenInfoResponse};
5
6#[cw_serde]
7pub enum Denom {
8 Native(String),
9 Cw20(Addr),
10}
11
12#[cw_serde]
13pub enum UncheckedDenom {
14 Native(String),
15 Cw20(String),
16}
17
18#[cw_serde]
19pub struct DepositInfo {
20 amount: Uint128,
21 denom: UncheckedDenom,
22}
23
24impl UncheckedDenom {
25 pub fn into_checked(self, deps: Deps) -> StdResult<Denom> {
26 match self {
27 Self::Native(denom) => Ok(Denom::Native(denom)),
28 Self::Cw20(addr) => {
29 let addr = deps.api.addr_validate(&addr)?;
30 let _info: TokenInfoResponse = deps
31 .querier
32 .query_wasm_smart(addr.clone(), &Cw20QueryMsg::TokenInfo {})?;
33 Ok(Denom::Cw20(addr))
34 }
35 }
36 }
37}
38
39impl Default for Denom {
41 fn default() -> Denom {
42 Denom::Native(String::default())
43 }
44}
45
46impl Denom {
47 pub fn is_empty(&self) -> bool {
48 match self {
49 Denom::Native(string) => string.is_empty(),
50 Denom::Cw20(addr) => addr.as_ref().is_empty(),
51 }
52 }
53}