1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use cosmwasm_std::{
5 to_binary, Addr, CosmosMsg, CustomQuery, Querier, QuerierWrapper, StdResult, WasmMsg, WasmQuery,
6};
7
8use crate::msg::{ExecuteMsg, GetCountResponse, QueryMsg};
9
10#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
13pub struct CwTemplateContract(pub Addr);
14
15impl CwTemplateContract {
16 pub fn addr(&self) -> Addr {
17 self.0.clone()
18 }
19
20 pub fn call<T: Into<ExecuteMsg>>(&self, msg: T) -> StdResult<CosmosMsg> {
21 let msg = to_binary(&msg.into())?;
22 Ok(WasmMsg::Execute {
23 contract_addr: self.addr().into(),
24 msg,
25 funds: vec![],
26 }
27 .into())
28 }
29
30 pub fn count<Q, T, CQ>(&self, querier: &Q) -> StdResult<GetCountResponse>
32 where
33 Q: Querier,
34 T: Into<String>,
35 CQ: CustomQuery,
36 {
37 let msg = QueryMsg::GetCount {};
38 let query = WasmQuery::Smart {
39 contract_addr: self.addr().into(),
40 msg: to_binary(&msg)?,
41 }
42 .into();
43 let res: GetCountResponse = QuerierWrapper::<CQ>::new(querier).query(&query)?;
44 Ok(res)
45 }
46}