1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use cosmwasm_std::{Coin, CosmosMsg, HumanAddr};
5
6#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
7#[serde(rename_all = "snake_case")]
8pub struct TerraMsgWrapper {
10 pub route: String,
11 pub msg_data: TerraMsg,
12}
13
14impl Into<CosmosMsg<TerraMsgWrapper>> for TerraMsgWrapper {
16 fn into(self) -> CosmosMsg<TerraMsgWrapper> {
17 CosmosMsg::Custom(self)
18 }
19}
20
21#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
22#[serde(rename_all = "snake_case")]
23pub enum TerraMsg {
24 Swap {
25 trader: HumanAddr,
26 offer_coin: Coin,
27 ask_denom: String,
28 },
29 SwapSend {
30 from_address: HumanAddr,
31 to_address: HumanAddr,
32 offer_coin: Coin,
33 ask_denom: String,
34 },
35}
36
37pub fn create_swap_msg(
39 trader: HumanAddr,
40 offer_coin: Coin,
41 ask_denom: String,
42) -> CosmosMsg<TerraMsgWrapper> {
43 TerraMsgWrapper {
44 route: "market".to_string(),
45 msg_data: TerraMsg::Swap {
46 trader,
47 offer_coin,
48 ask_denom,
49 },
50 }
51 .into()
52}
53
54pub fn create_swap_send_msg(
56 from_address: HumanAddr,
57 to_address: HumanAddr,
58 offer_coin: Coin,
59 ask_denom: String,
60) -> CosmosMsg<TerraMsgWrapper> {
61 TerraMsgWrapper {
62 route: "market".to_string(),
63 msg_data: TerraMsg::SwapSend {
64 from_address,
65 to_address,
66 offer_coin,
67 ask_denom,
68 },
69 }
70 .into()
71}