use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use cosmwasm_std::{Decimal, Uint128};
use cw20::{Denom, Expiration};
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct InstantiateMsg {
pub token1_denom: Denom,
pub token2_denom: Denom,
pub lp_token_code_id: u64,
pub owner: Option<String>,
pub protocol_fee_recipient: String,
pub protocol_fee_percent: Decimal,
pub lp_fee_percent: Decimal,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub enum TokenSelect {
Token1,
Token2,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
AddLiquidity {
token1_amount: Uint128,
min_liquidity: Uint128,
max_token2: Uint128,
expiration: Option<Expiration>,
},
RemoveLiquidity {
amount: Uint128,
min_token1: Uint128,
min_token2: Uint128,
expiration: Option<Expiration>,
},
Swap {
input_token: TokenSelect,
input_amount: Uint128,
min_output: Uint128,
expiration: Option<Expiration>,
},
PassThroughSwap {
output_amm_address: String,
input_token: TokenSelect,
input_token_amount: Uint128,
output_min_token: Uint128,
expiration: Option<Expiration>,
},
SwapAndSendTo {
input_token: TokenSelect,
input_amount: Uint128,
recipient: String,
min_token: Uint128,
expiration: Option<Expiration>,
},
UpdateConfig {
owner: Option<String>,
lp_fee_percent: Decimal,
protocol_fee_percent: Decimal,
protocol_fee_recipient: String,
},
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Balance {
address: String,
},
Info {},
Token1ForToken2Price {
token1_amount: Uint128,
},
Token2ForToken1Price {
token2_amount: Uint128,
},
Fee {},
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct MigrateMsg {
pub owner: Option<String>,
pub protocol_fee_recipient: String,
pub protocol_fee_percent: Decimal,
pub lp_fee_percent: Decimal,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct InfoResponse {
pub token1_reserve: Uint128,
pub token1_denom: Denom,
pub token2_reserve: Uint128,
pub token2_denom: Denom,
pub lp_token_supply: Uint128,
pub lp_token_address: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct FeeResponse {
pub owner: Option<String>,
pub lp_fee_percent: Decimal,
pub protocol_fee_percent: Decimal,
pub protocol_fee_recipient: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct Token1ForToken2PriceResponse {
pub token2_amount: Uint128,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct Token2ForToken1PriceResponse {
pub token1_amount: Uint128,
}