abstract_std/objects/
deposit_info.rs1use cw_asset::AssetInfo;
2use schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4
5use crate::{error::AbstractError, AbstractResult};
6
7#[derive(Deserialize, Serialize, Clone, Debug, PartialEq, JsonSchema)]
9pub struct DepositInfo {
10 pub asset_info: AssetInfo,
11}
12
13impl DepositInfo {
14 pub fn assert(&self, asset_info: &AssetInfo) -> AbstractResult<()> {
15 if asset_info == &self.asset_info {
16 return Ok(());
17 }
18
19 Err(AbstractError::Assert(format!(
20 "Invalid deposit asset. Expected {}, got {}.",
21 self.asset_info, asset_info
22 )))
23 }
24
25 pub fn get_denom(self) -> AbstractResult<String> {
26 match self.asset_info {
27 AssetInfo::Native(denom) => Ok(denom),
28 AssetInfo::Cw20(..) => Err(AbstractError::Assert(
29 "'denom' only exists for native tokens.".into(),
30 )),
31 _ => panic!("asset not supported"),
32 }
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use cosmwasm_std::Addr;
39
40 use super::*;
41
42 pub const TEST_DENOM1: &str = "uusd";
43 pub const TEST_DENOM2: &str = "uluna";
44 pub const TEST_ADDR1: &str = "1234";
45 pub const TEST_ADDR2: &str = "4321";
46
47 #[coverage_helper::test]
48 fn test_failing_assert_for_native_tokens() {
49 let deposit_info = DepositInfo {
50 asset_info: AssetInfo::Native(TEST_DENOM1.to_string()),
51 };
52 let other_native_token = AssetInfo::Native(TEST_DENOM2.to_string());
53 assert!(deposit_info.assert(&other_native_token).is_err());
54 }
55
56 #[coverage_helper::test]
57 fn test_passing_assert_for_native_tokens() {
58 let deposit_info = DepositInfo {
59 asset_info: AssetInfo::Native(TEST_DENOM1.to_string()),
60 };
61 let other_native_token = AssetInfo::Native(TEST_DENOM1.to_string());
62 assert!(deposit_info.assert(&other_native_token).is_ok());
63 }
64
65 #[coverage_helper::test]
66 fn test_failing_assert_for_nonnative_tokens() {
67 let deposit_info = DepositInfo {
68 asset_info: AssetInfo::Cw20(Addr::unchecked(TEST_ADDR1.to_string())),
69 };
70 let other_native_token = AssetInfo::Cw20(Addr::unchecked(TEST_ADDR2.to_string()));
71 assert!(deposit_info.assert(&other_native_token).is_err());
72 }
73
74 #[coverage_helper::test]
75 fn test_passing_assert_for_nonnative_tokens() {
76 let deposit_info = DepositInfo {
77 asset_info: AssetInfo::Cw20(Addr::unchecked(TEST_ADDR1.to_string())),
78 };
79 let other_native_token = AssetInfo::Cw20(Addr::unchecked(TEST_ADDR1.to_string()));
80 assert!(deposit_info.assert(&other_native_token).is_ok());
81 }
82
83 #[coverage_helper::test]
84 fn test_failing_assert_for_mixed_tokens() {
85 let deposit_info = DepositInfo {
86 asset_info: AssetInfo::Native(TEST_DENOM1.to_string()),
87 };
88 let other_native_token = AssetInfo::Cw20(Addr::unchecked(TEST_DENOM1.to_string()));
89 assert!(deposit_info.assert(&other_native_token).is_err());
90 }
91}