use cosmwasm_std::{ to_json_binary, Addr, CosmosMsg, CustomQuery, Querier, QuerierWrapper, StdResult, WasmMsg, WasmQuery, }; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use crate::msg::{ExecuteMsg, GetTcbInfoResponse, QueryMsg}; const FMSPC: &str = "00606a000000"; /// CwTemplateContract is a wrapper around Addr that provides a lot of helpers /// for working with this. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)] pub struct CwTemplateContract(pub Addr); impl CwTemplateContract { pub fn addr(&self) -> Addr { self.0.clone() } pub fn call>(&self, msg: T) -> StdResult { let msg = to_json_binary(&msg.into())?; Ok(WasmMsg::Execute { contract_addr: self.addr().into(), msg, funds: vec![], } .into()) } // Get Count pub fn get_tcbinfo(&self, querier: &Q) -> StdResult where Q: Querier, T: Into, CQ: CustomQuery, { let msg = QueryMsg::GetTcbInfo { fmspc: FMSPC.to_string(), }; let query = WasmQuery::Smart { contract_addr: self.addr().into(), msg: to_json_binary(&msg)?, } .into(); let res: GetTcbInfoResponse = QuerierWrapper::::new(querier).query(&query)?; Ok(res) } }