ibcx_test_utils/
querier.rs

1use 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}