1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use cosmwasm_std::Uint128;
5use cw20::Cw20ReceiveMsg;
6
7use crate::asset::AssetInfo;
8
9#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
10pub struct InstantiateMsg {
11 pub terraswap_factory: String,
12}
13
14#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
15#[serde(rename_all = "snake_case")]
16pub enum SwapOperation {
17 TerraSwap {
18 offer_asset_info: AssetInfo,
19 ask_asset_info: AssetInfo,
20 },
21}
22
23impl SwapOperation {
24 pub fn get_target_asset_info(&self) -> AssetInfo {
25 match self {
26 SwapOperation::TerraSwap { ask_asset_info, .. } => ask_asset_info.clone(),
27 }
28 }
29}
30
31#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
32#[serde(rename_all = "snake_case")]
33pub enum ExecuteMsg {
34 Receive(Cw20ReceiveMsg),
35 ExecuteSwapOperations {
37 operations: Vec<SwapOperation>,
38 minimum_receive: Option<Uint128>,
39 to: Option<String>,
40 deadline: Option<u64>,
41 },
42
43 ExecuteSwapOperation {
46 operation: SwapOperation,
47 to: Option<String>,
48 deadline: Option<u64>,
49 },
50 AssertMinimumReceive {
53 asset_info: AssetInfo,
54 prev_balance: Uint128,
55 minimum_receive: Uint128,
56 receiver: String,
57 },
58}
59
60#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
61#[serde(rename_all = "snake_case")]
62pub enum Cw20HookMsg {
63 ExecuteSwapOperations {
64 operations: Vec<SwapOperation>,
65 minimum_receive: Option<Uint128>,
66 to: Option<String>,
67 deadline: Option<u64>,
68 },
69}
70
71#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
72#[serde(rename_all = "snake_case")]
73pub enum QueryMsg {
74 Config {},
75 SimulateSwapOperations {
76 offer_amount: Uint128,
77 operations: Vec<SwapOperation>,
78 },
79 ReverseSimulateSwapOperations {
80 ask_amount: Uint128,
81 operations: Vec<SwapOperation>,
82 },
83}
84
85#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
87pub struct ConfigResponse {
88 pub terraswap_factory: String,
89}
90
91#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
93pub struct SimulateSwapOperationsResponse {
94 pub amount: Uint128,
95}
96
97#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
99pub struct MigrateMsg {}