mars_core/testing/
astroport_pair_querier.rs

1use std::collections::HashMap;
2
3use cosmwasm_std::{to_binary, Addr, Binary, ContractResult, QuerierResult, SystemError};
4
5use astroport::pair::{CumulativePricesResponse, PoolResponse, QueryMsg, SimulationResponse};
6
7#[derive(Clone, Default)]
8pub struct AstroportPairQuerier {
9    pub pairs: HashMap<String, PoolResponse>,
10    pub simulations: HashMap<String, SimulationResponse>,
11    pub cumulative_prices: HashMap<String, CumulativePricesResponse>,
12}
13
14impl AstroportPairQuerier {
15    pub fn handle_query(&self, contract_addr: &Addr, request: &QueryMsg) -> QuerierResult {
16        let key = contract_addr.to_string();
17        let ret: ContractResult<Binary> = match &request {
18            QueryMsg::Pool {} => match self.pairs.get(&key) {
19                Some(pool_response) => to_binary(&pool_response).into(),
20                None => Err(SystemError::InvalidRequest {
21                    error: format!("PoolResponse is not found for {}", key),
22                    request: Default::default(),
23                })
24                .into(),
25            },
26            QueryMsg::CumulativePrices {} => match self.cumulative_prices.get(&key) {
27                Some(cumulative_prices_response) => to_binary(&cumulative_prices_response).into(),
28                None => Err(SystemError::InvalidRequest {
29                    error: format!("CumulativePricesResponse is not found for {}", key),
30                    request: Default::default(),
31                })
32                .into(),
33            },
34            QueryMsg::Simulation { .. } => match self.simulations.get(&key) {
35                Some(simulation_response) => to_binary(&simulation_response).into(),
36                None => Err(SystemError::InvalidRequest {
37                    error: format!("SimulationResponse is not found for {}", key),
38                    request: Default::default(),
39                })
40                .into(),
41            },
42            _ => {
43                panic!("[mock]: Unsupported Astroport pair query");
44            }
45        };
46
47        Ok(ret).into()
48    }
49}