terraswap/
router.rs

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    /// Execute multiple BuyOperation
36    ExecuteSwapOperations {
37        operations: Vec<SwapOperation>,
38        minimum_receive: Option<Uint128>,
39        to: Option<String>,
40        deadline: Option<u64>,
41    },
42
43    /// Internal use
44    /// Swap all offer tokens to ask token
45    ExecuteSwapOperation {
46        operation: SwapOperation,
47        to: Option<String>,
48        deadline: Option<u64>,
49    },
50    /// Internal use
51    /// Check the swap amount is exceed minimum_receive
52    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// We define a custom struct for each query response
86#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
87pub struct ConfigResponse {
88    pub terraswap_factory: String,
89}
90
91// We define a custom struct for each query response
92#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
93pub struct SimulateSwapOperationsResponse {
94    pub amount: Uint128,
95}
96
97/// We currently take no arguments for migrations
98#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
99pub struct MigrateMsg {}