1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#[cfg(not(feature = "library"))]
use cosmwasm_std::entry_point;
use cosmwasm_std::{
to_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdError, StdResult,
};
use cw2::set_contract_version;
use mod_sdk::types::QueryResponse;
use crate::helpers::{bin_to_value, query_wasm_smart_raw};
use crate::msg::{ExecuteMsg, InstantiateMsg, QueryMsg};
use crate::types::GenericQuery;
use crate::ContractError;
const CONTRACT_NAME: &str = "crate:croncat-mod-generic";
const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION");
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn instantiate(
deps: DepsMut,
_env: Env,
_info: MessageInfo,
msg: InstantiateMsg,
) -> Result<Response, StdError> {
let contract_version = msg.version.unwrap_or_else(|| CONTRACT_VERSION.to_string());
set_contract_version(deps.storage, CONTRACT_NAME, &contract_version)?;
Ok(Response::new().add_attribute("action", "instantiate"))
}
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn execute(
_deps: DepsMut,
_env: Env,
_info: MessageInfo,
_msg: ExecuteMsg,
) -> Result<Response, ContractError> {
Err(ContractError::Noop)
}
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
match msg {
QueryMsg::GenericQuery(query) => to_binary(&generic_query(deps, query)?),
}
}
fn generic_query(deps: Deps, query: GenericQuery) -> StdResult<QueryResponse> {
let mut json_val = query_wasm_smart_raw(deps, query.contract_addr, query.msg)
.and_then(|bin| bin_to_value(bin.as_slice()))?;
let json_rhs = cosmwasm_std::from_slice(query.value.as_slice())
.map_err(|e| StdError::parse_err(std::any::type_name::<serde_cw_value::Value>(), e))?;
let value = query.path_to_value.find_value(&mut json_val)?;
let result = query.ordering.val_cmp(value, &json_rhs)?;
Ok(QueryResponse {
result,
data: to_binary(&value)?,
})
}