1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use crate::asset::{Asset, AssetInfo};
5
6use cosmwasm_std::{Decimal, Uint128};
7use cw20::Cw20ReceiveMsg;
8
9#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
10pub struct InstantiateMsg {
11 pub asset_infos: [AssetInfo; 2],
13 pub token_code_id: u64,
15 pub asset_decimals: [u8; 2],
16}
17
18#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
19#[serde(rename_all = "snake_case")]
20pub enum ExecuteMsg {
21 Receive(Cw20ReceiveMsg),
22 ProvideLiquidity {
24 assets: [Asset; 2],
25 receiver: Option<String>,
26 deadline: Option<u64>,
27 slippage_tolerance: Option<Decimal>,
28 },
29 Swap {
31 offer_asset: Asset,
32 belief_price: Option<Decimal>,
33 max_spread: Option<Decimal>,
34 to: Option<String>,
35 deadline: Option<u64>,
36 },
37 AdminConfigure {
38 assets: [AssetInfo; 2],
39 asset_decimals: [u8; 2],
40 },
41}
42
43#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
44#[serde(rename_all = "snake_case")]
45pub enum Cw20HookMsg {
46 Swap {
48 belief_price: Option<Decimal>,
49 max_spread: Option<Decimal>,
50 to: Option<String>,
51 deadline: Option<u64>,
52 },
53 WithdrawLiquidity {
54 min_assets: Option<[Asset; 2]>,
55 deadline: Option<u64>,
56 },
57}
58
59#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
60#[serde(rename_all = "snake_case")]
61pub enum QueryMsg {
62 Pair {},
63 Pool {},
64 Simulation { offer_asset: Asset },
65 ReverseSimulation { ask_asset: Asset },
66}
67
68#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
70pub struct PoolResponse {
71 pub assets: [Asset; 2],
72 pub total_share: Uint128,
73}
74
75#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
77pub struct SimulationResponse {
78 pub return_amount: Uint128,
79 pub spread_amount: Uint128,
80 pub commission_amount: Uint128,
81}
82
83#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
85pub struct ReverseSimulationResponse {
86 pub offer_amount: Uint128,
87 pub spread_amount: Uint128,
88 pub commission_amount: Uint128,
89}
90
91#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
93pub struct MigrateMsg {}