1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use cosmwasm_std::Coin;
5use cw20::{Cw20Coin, Cw20ReceiveMsg, Expiration};
6
7#[derive(Serialize, Deserialize, JsonSchema)]
8pub struct InstantiateMsg {}
9
10#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
11#[serde(rename_all = "snake_case")]
12pub enum ExecuteMsg {
13 Create(CreateMsg),
14 Release {
16 id: String,
17 preimage: String,
20 },
21 Refund {
23 id: String,
24 },
25 Receive(Cw20ReceiveMsg),
27}
28
29#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
30#[serde(rename_all = "snake_case")]
31pub enum ReceiveMsg {
32 Create(CreateMsg),
33}
34
35#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
36pub struct CreateMsg {
37 pub id: String,
40 pub hash: String,
42 pub recipient: String,
44 pub expires: Expiration,
47}
48
49pub fn is_valid_name(name: &str) -> bool {
50 let bytes = name.as_bytes();
51 if bytes.len() < 3 || bytes.len() > 20 {
52 return false;
53 }
54 true
55}
56
57#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
58#[serde(rename_all = "snake_case")]
59pub enum QueryMsg {
60 List {
62 start_after: Option<String>,
63 limit: Option<u32>,
64 },
65 Details { id: String },
68}
69
70#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
71pub struct ListResponse {
72 pub swaps: Vec<String>,
74}
75
76#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
77pub struct DetailsResponse {
78 pub id: String,
80 pub hash: String,
82 pub recipient: String,
84 pub source: String,
86 pub expires: Expiration,
88 pub balance: BalanceHuman,
90}
91
92#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
93pub enum BalanceHuman {
94 Native(Vec<Coin>),
95 Cw20(Cw20Coin),
96}