mars_core/testing/
astroport_pair_querier.rs1use 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}