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