croncat_mod_generic/
helpers.rs

1use cosmwasm_std::{to_vec, Binary, Deps, Empty, QueryRequest, StdError, StdResult, WasmQuery};
2use serde_cw_value::Value;
3
4pub fn query_wasm_smart_raw(
5    deps: Deps,
6    contract_addr: impl Into<String>,
7    msg: Binary,
8) -> StdResult<Binary> {
9    let contract_addr = contract_addr.into();
10    let request: QueryRequest<Empty> = QueryRequest::Wasm(WasmQuery::Smart { contract_addr, msg });
11
12    // Copied from `QuerierWrapper::query`
13    // because serde_json_wasm fails to deserialize slice into `serde_cw_value::Value`
14    let raw = to_vec(&request).map_err(|serialize_err| {
15        StdError::generic_err(format!("Serializing QueryRequest: {}", serialize_err))
16    })?;
17    let bin = match deps.querier.raw_query(&raw) {
18        cosmwasm_std::SystemResult::Ok(cosmwasm_std::ContractResult::Ok(value)) => value,
19        cosmwasm_std::SystemResult::Ok(cosmwasm_std::ContractResult::Err(contract_err)) => {
20            return Err(StdError::generic_err(format!(
21                "Querier contract error: {}",
22                contract_err
23            )));
24        }
25        cosmwasm_std::SystemResult::Err(system_err) => {
26            return Err(StdError::generic_err(format!(
27                "Querier system error: {}",
28                system_err
29            )));
30        }
31    };
32    Ok(bin)
33}
34
35pub fn bin_to_value(bin: &[u8]) -> StdResult<Value> {
36    cosmwasm_std::from_slice(bin)
37        .map_err(|e| StdError::parse_err(std::any::type_name::<serde_cw_value::Value>(), e))
38}