sg_splits/
helpers.rs

1use cosmwasm_schema::cw_serde;
2use cw4::MemberListResponse;
3
4use cosmwasm_std::{
5    to_json_binary, Addr, CosmosMsg, CustomQuery, Querier, QuerierWrapper, StdResult, WasmMsg,
6    WasmQuery,
7};
8
9use crate::msg::{ExecuteMsg, QueryMsg};
10
11/// CwTemplateContract is a wrapper around Addr that provides a lot of helpers
12/// for working with this.
13#[cw_serde]
14pub struct SplitsContract(pub Addr);
15
16impl SplitsContract {
17    pub fn addr(&self) -> Addr {
18        self.0.clone()
19    }
20
21    pub fn call<T: Into<ExecuteMsg>>(&self, msg: T) -> StdResult<CosmosMsg> {
22        let msg = to_json_binary(&msg.into())?;
23        Ok(WasmMsg::Execute {
24            contract_addr: self.addr().into(),
25            msg,
26            funds: vec![],
27        }
28        .into())
29    }
30
31    pub fn list_members<Q, T, CQ>(&self, querier: &Q) -> StdResult<MemberListResponse>
32    where
33        Q: Querier,
34        T: Into<String>,
35        CQ: CustomQuery,
36    {
37        let msg = QueryMsg::ListMembers {
38            start_after: None,
39            limit: None,
40        };
41        let query = WasmQuery::Smart {
42            contract_addr: self.addr().into(),
43            msg: to_json_binary(&msg)?,
44        }
45        .into();
46        let res: MemberListResponse = QuerierWrapper::<CQ>::new(querier).query(&query)?;
47        Ok(res)
48    }
49}