terra_bindings/
msg.rs

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")]
8/// TerraMsgWrapper is an override of CosmosMsg::Custom to show this works and can be extended in the contract
9pub struct TerraMsgWrapper {
10    pub route: String,
11    pub msg_data: TerraMsg,
12}
13
14// this is a helper to be able to return these as CosmosMsg easier
15impl 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
37// create_swap_msg returns wrapped swap msg
38pub 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
54// create_swap_send_msg returns wrapped swap send msg
55pub 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}