use cosmwasm_schema::QueryResponses;
use cosmwasm_std::{CosmosMsg, Empty, Uint128};
use cw_asset::{Asset, AssetInfo};
#[allow(unused_imports)]
use crate::{
ibc_client::ExecuteMsg as IbcClientMsg,
objects::{
account::AccountId,
oracle::{AccountValue, Complexity},
price_source::{PriceSource, UncheckedPriceSource},
AssetEntry,
},
};
pub mod state {
use cosmwasm_std::Addr;
use cw_controllers::Admin;
use cw_storage_plus::Item;
pub use crate::objects::account::ACCOUNT_ID;
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,
pub manager_addr: String,
pub base_asset: Option<AssetEntry>,
}
#[cosmwasm_schema::cw_serde]
#[derive(cw_orch::ExecuteFns)]
pub enum ExecuteMsg {
SetAdmin { admin: String },
ModuleAction { msgs: Vec<CosmosMsg<Empty>> },
ModuleActionWithData { msg: CosmosMsg<Empty> },
IbcAction { msg: IbcClientMsg },
AddModules { modules: Vec<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, 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,
}