use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use cosmwasm_std::{Decimal, HumanAddr, Uint128};
use cw20::Cw20ReceiveMsg;
use terraswap::{Asset, AssetInfo};
use crate::common::OrderBy;
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct InitMsg {
pub owner: HumanAddr,
pub oracle: HumanAddr,
pub collector: HumanAddr,
pub base_denom: String,
pub token_code_id: u64,
pub protocol_fee_rate: Decimal,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum HandleMsg {
Receive(Cw20ReceiveMsg),
UpdateConfig {
owner: Option<HumanAddr>,
oracle: Option<HumanAddr>,
collector: Option<HumanAddr>,
token_code_id: Option<u64>,
protocol_fee_rate: Option<Decimal>,
},
UpdateAsset {
asset_token: HumanAddr,
auction_discount: Option<Decimal>,
min_collateral_ratio: Option<Decimal>,
},
RegisterAsset {
asset_token: HumanAddr,
auction_discount: Decimal,
min_collateral_ratio: Decimal,
},
RegisterMigration {
asset_token: HumanAddr,
end_price: Decimal,
},
OpenPosition {
collateral: Asset,
asset_info: AssetInfo,
collateral_ratio: Decimal,
},
Deposit {
position_idx: Uint128,
collateral: Asset,
},
Withdraw {
position_idx: Uint128,
collateral: Asset,
},
Mint {
position_idx: Uint128,
asset: Asset,
},
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum Cw20HookMsg {
OpenPosition {
asset_info: AssetInfo,
collateral_ratio: Decimal,
},
Deposit { position_idx: Uint128 },
Burn { position_idx: Uint128 },
Auction { position_idx: Uint128 },
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Config {},
AssetConfig {
asset_token: HumanAddr,
},
Position {
position_idx: Uint128,
},
Positions {
owner_addr: Option<HumanAddr>,
asset_token: Option<HumanAddr>,
start_after: Option<Uint128>,
limit: Option<u32>,
order_by: Option<OrderBy>,
},
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct ConfigResponse {
pub owner: HumanAddr,
pub oracle: HumanAddr,
pub collector: HumanAddr,
pub base_denom: String,
pub token_code_id: u64,
pub protocol_fee_rate: Decimal,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct AssetConfigResponse {
pub token: HumanAddr,
pub auction_discount: Decimal,
pub min_collateral_ratio: Decimal,
pub end_price: Option<Decimal>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct PositionResponse {
pub idx: Uint128,
pub owner: HumanAddr,
pub collateral: Asset,
pub asset: Asset,
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug, Default)]
pub struct PositionsResponse {
pub positions: Vec<PositionResponse>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct MigrateMsg {}