#[allow(unused_imports)]
use crate::{
ibc_client::ExecuteMsg as IbcClientMsg,
objects::{
account_id::AccountId,
oracle::{AccountValue, Complexity},
price_source::{PriceSource, UncheckedPriceSource},
AssetEntry,
},
};
use cosmwasm_schema::QueryResponses;
use cosmwasm_std::{CosmosMsg, Empty, Uint128};
use cw_asset::{Asset, AssetInfo};
pub mod state {
pub use crate::objects::account_id::ACCOUNT_ID;
use cw_controllers::Admin;
use cosmwasm_std::Addr;
use cw_storage_plus::Item;
use crate::objects::{ans_host::AnsHost, common_namespace::ADMIN_NAMESPACE};
#[cosmwasm_schema::cw_serde]
pub struct State {
pub modules: Vec<Addr>,
}
pub const ANS_HOST: Item<AnsHost> = Item::new("\u{0}{6}ans_host");
pub const STATE: Item<State> = Item::new("\u{0}{5}state");
pub const ADMIN: Admin = Admin::new(ADMIN_NAMESPACE);
}
#[cosmwasm_schema::cw_serde]
pub struct InstantiateMsg {
pub account_id: AccountId,
pub ans_host_address: String,
}
#[cosmwasm_schema::cw_serde]
#[cfg_attr(feature = "interface", derive(cw_orch::ExecuteFns))]
pub enum ExecuteMsg {
SetAdmin { admin: String },
ModuleAction { msgs: Vec<CosmosMsg<Empty>> },
IbcAction { msgs: Vec<IbcClientMsg> },
AddModule { module: String },
RemoveModule { module: String },
UpdateAssets {
to_add: Vec<(AssetEntry, UncheckedPriceSource)>,
to_remove: Vec<AssetEntry>,
},
}
#[cosmwasm_schema::cw_serde]
pub struct MigrateMsg {}
#[cosmwasm_schema::cw_serde]
#[derive(QueryResponses)]
#[cfg_attr(feature = "interface", derive(cw_orch::QueryFns))]
pub enum QueryMsg {
#[returns(ConfigResponse)]
Config {},
#[returns(AccountValue)]
TotalValue {},
#[returns(TokenValueResponse)]
TokenValue { identifier: AssetEntry },
#[returns(HoldingAmountResponse)]
HoldingAmount { identifier: AssetEntry },
#[returns(AssetConfigResponse)]
AssetConfig { identifier: AssetEntry },
#[returns(AssetsConfigResponse)]
AssetsConfig {
start_after: Option<AssetEntry>,
limit: Option<u8>,
},
#[returns(AssetsInfoResponse)]
AssetsInfo {
start_after: Option<AssetInfo>,
limit: Option<u8>,
},
#[returns(BaseAssetResponse)]
BaseAsset {},
}
#[cosmwasm_schema::cw_serde]
pub struct ConfigResponse {
pub modules: Vec<String>,
}
#[cosmwasm_schema::cw_serde]
pub struct TokenValueResponse {
pub value: Uint128,
}
#[cosmwasm_schema::cw_serde]
pub struct BaseAssetResponse {
pub base_asset: AssetInfo,
}
#[cosmwasm_schema::cw_serde]
pub struct HoldingAmountResponse {
pub amount: Uint128,
}
#[cosmwasm_schema::cw_serde]
pub struct AssetConfigResponse {
pub price_source: UncheckedPriceSource,
}
#[cosmwasm_schema::cw_serde]
pub struct AssetsInfoResponse {
pub assets: Vec<(AssetInfo, OracleAsset)>,
}
#[cosmwasm_schema::cw_serde]
pub struct AssetsConfigResponse {
pub assets: Vec<(AssetEntry, UncheckedPriceSource)>,
}
#[cosmwasm_schema::cw_serde]
pub struct OracleAsset {
pub price_source: PriceSource,
pub complexity: Complexity,
}
#[cosmwasm_schema::cw_serde]
pub struct ValueQueryMsg {
pub asset: AssetInfo,
pub amount: Uint128,
}
#[cosmwasm_schema::cw_serde]
pub struct ExternalValueResponse {
pub value: Asset,
}