cw_ibc_query/
contract.rs

1use cosmwasm_std::{
2    entry_point, to_binary, Deps, DepsMut, Env, MessageInfo, Order, QueryResponse, Response,
3    StdResult,
4};
5
6use crate::msg::{ChannelInfo, ChannelResponse, InstantiateMsg, ListChannelsResponse, QueryMsg};
7use crate::state::CHANNELS_INFO;
8
9#[entry_point]
10pub fn instantiate(
11    _deps: DepsMut,
12    _env: Env,
13    _info: MessageInfo,
14    _msg: InstantiateMsg,
15) -> StdResult<Response> {
16    Ok(Response::new().add_attribute("action", "instantiate"))
17}
18
19#[entry_point]
20pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<QueryResponse> {
21    match msg {
22        QueryMsg::Channel { id } => to_binary(&query_channel(deps, id)?),
23        QueryMsg::ListChannels {} => to_binary(&query_list_channels(deps)?),
24    }
25}
26
27fn query_channel(deps: Deps, channel_id: String) -> StdResult<ChannelResponse> {
28    let channel = CHANNELS_INFO.load(deps.storage, &channel_id)?;
29    Ok(channel.into())
30}
31
32fn query_list_channels(deps: Deps) -> StdResult<ListChannelsResponse> {
33    let channels: StdResult<Vec<_>> = CHANNELS_INFO
34        .range(deps.storage, None, None, Order::Ascending)
35        .map(|r| {
36            let (k, account) = r?;
37            Ok(ChannelInfo::convert(k, account))
38        })
39        .collect();
40    Ok(ListChannelsResponse {
41        channels: channels?,
42    })
43}
44
45#[cfg(test)]
46mod tests {
47    use super::*;
48    use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info};
49
50    const CREATOR: &str = "creator";
51
52    #[test]
53    fn instantiate_works() {
54        let mut deps = mock_dependencies();
55        let msg = InstantiateMsg {};
56        let info = mock_info(CREATOR, &[]);
57        let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap();
58        assert_eq!(0, res.messages.len());
59    }
60}