cw_orch_clone_testing/queriers/
bank.rs

1use std::{cell::RefCell, rc::Rc};
2
3use cosmwasm_std::{Addr, Coin};
4use cw_orch_core::{
5    environment::{BankQuerier, Querier, QuerierGetter, StateInterface},
6    CwEnvError,
7};
8
9use crate::{core::CloneTestingApp, CloneTesting};
10
11pub struct CloneBankQuerier {
12    app: Rc<RefCell<CloneTestingApp>>,
13}
14
15impl CloneBankQuerier {
16    fn new<S: StateInterface>(mock: &CloneTesting<S>) -> Self {
17        Self {
18            app: mock.app.clone(),
19        }
20    }
21}
22
23impl<S: StateInterface> QuerierGetter<CloneBankQuerier> for CloneTesting<S> {
24    fn querier(&self) -> CloneBankQuerier {
25        CloneBankQuerier::new(self)
26    }
27}
28
29impl Querier for CloneBankQuerier {
30    type Error = CwEnvError;
31}
32
33impl BankQuerier for CloneBankQuerier {
34    fn balance(
35        &self,
36        address: &Addr,
37        denom: Option<String>,
38    ) -> Result<Vec<cosmwasm_std::Coin>, Self::Error> {
39        if let Some(denom) = denom {
40            let amount = self
41                .app
42                .borrow()
43                .wrap()
44                .query_balance(address, denom.clone())?
45                .amount;
46            Ok(vec![Coin { amount, denom }])
47        } else {
48            let amount = self.app.borrow().wrap().query_all_balances(address)?;
49            Ok(amount)
50        }
51    }
52
53    fn supply_of(&self, denom: impl Into<String>) -> Result<cosmwasm_std::Coin, Self::Error> {
54        Ok(self.app.borrow().wrap().query_supply(denom)?)
55    }
56
57    fn total_supply(&self) -> Result<Vec<cosmwasm_std::Coin>, Self::Error> {
58        unimplemented!()
59    }
60}