1use cosmwasm_std::{Addr, Deps, Order, StdResult};
2use cw_storage_plus::Bound;
3
4use crate::{
5 state::{ASSET_PARAMS, VAULT_CONFIGS},
6 types::{asset::AssetParams, vault::VaultConfig},
7};
8
9pub const DEFAULT_LIMIT: u32 = 10;
10
11pub fn query_all_asset_params(
12 deps: Deps,
13 start_after: Option<String>,
14 limit: Option<u32>,
15) -> StdResult<Vec<AssetParams>> {
16 let start = start_after.as_ref().map(|denom| Bound::exclusive(denom.as_str()));
17 let limit = limit.unwrap_or(DEFAULT_LIMIT) as usize;
18 ASSET_PARAMS
19 .range(deps.storage, start, None, Order::Ascending)
20 .take(limit)
21 .map(|res| Ok(res?.1))
22 .collect()
23}
24
25pub fn query_vault_config(deps: Deps, unchecked: &str) -> StdResult<VaultConfig> {
26 let addr = deps.api.addr_validate(unchecked)?;
27 VAULT_CONFIGS.load(deps.storage, &addr)
28}
29
30pub fn query_all_vault_configs(
31 deps: Deps,
32 start_after: Option<String>,
33 limit: Option<u32>,
34) -> StdResult<Vec<VaultConfig>> {
35 let vault_addr: Addr;
36 let start = match &start_after {
37 Some(unchecked) => {
38 vault_addr = deps.api.addr_validate(unchecked)?;
39 Some(Bound::exclusive(&vault_addr))
40 }
41 None => None,
42 };
43
44 let limit = limit.unwrap_or(DEFAULT_LIMIT) as usize;
45
46 VAULT_CONFIGS
47 .range(deps.storage, start, None, Order::Ascending)
48 .take(limit)
49 .map(|res| Ok(res?.1))
50 .collect()
51}