ibcx_test_utils/
querier.rs1use cosmwasm_std::{
2 from_json, to_json_binary, ContractResult, Empty, QueryRequest, SystemError, SystemResult,
3};
4use osmosis_std::types::cosmwasm::wasm::v1::{
5 QuerySmartContractStateRequest, QuerySmartContractStateResponse,
6};
7use osmosis_test_tube::Runner;
8
9use crate::App;
10
11pub struct Querier<'a> {
12 app: &'a App,
13}
14
15impl<'a> Querier<'a> {
16 pub fn new(app: &'a App) -> Self {
17 Self { app }
18 }
19}
20
21impl cosmwasm_std::Querier for Querier<'_> {
22 fn raw_query(&self, bin_request: &[u8]) -> cosmwasm_std::QuerierResult {
23 let request: QueryRequest<Empty> = match from_json(bin_request) {
24 Ok(v) => v,
25 Err(e) => {
26 return SystemResult::Err(SystemError::InvalidRequest {
27 error: format!("Parsing query request: {e}"),
28 request: bin_request.into(),
29 })
30 }
31 };
32
33 let res = self
34 .app
35 .inner()
36 .query::<QuerySmartContractStateRequest, QuerySmartContractStateResponse>(
37 "/cosmwasm.wasm.v1.Query/SmartContractState",
38 &QuerySmartContractStateRequest {
39 address: self.app.wasm_querier().to_string(),
40 query_data: to_json_binary(&request).unwrap().to_vec(),
41 },
42 )
43 .unwrap();
44
45 SystemResult::Ok(ContractResult::Ok(res.data.into()))
46 }
47}