1use cosmwasm_schema::QueryResponses;
2use cosmwasm_std::{Binary, Coin};
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6use crate::deprecated::pagination::{PageRequest, PageResponse};
7
8pub const BURNING: u32 = 0;
9pub const FREEZING: u32 = 1;
10pub const WHITELISTING: u32 = 2;
11pub const DISABLE_SENDING: u32 = 3;
12pub const SOULBOUND: u32 = 4;
13
14#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
15#[serde(rename_all = "snake_case")]
16pub struct Params {
17 pub mint_fee: Coin,
18}
19
20#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
21#[serde(rename_all = "snake_case")]
22pub struct ParamsResponse {
23 pub params: Params,
24}
25
26#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
27#[serde(rename_all = "snake_case")]
28pub struct Class {
29 pub id: String,
30 pub issuer: String,
31 pub name: String,
32 pub symbol: String,
33 pub description: Option<String>,
34 pub uri: Option<String>,
35 pub uri_hash: Option<String>,
36 pub data: Option<Binary>,
37 pub features: Option<Vec<u32>>,
38 pub royalty_rate: Option<String>,
39}
40
41#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
42#[serde(rename_all = "snake_case")]
43pub struct ClassResponse {
44 pub class: Class,
45}
46
47#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
48#[serde(rename_all = "snake_case")]
49pub struct ClassesResponse {
50 pub pagination: PageResponse,
51 pub classes: Vec<Class>,
52}
53
54#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
55#[serde(rename_all = "snake_case")]
56pub struct FrozenResponse {
57 pub frozen: bool,
58}
59
60#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
61#[serde(rename_all = "snake_case")]
62pub struct ClassFrozenResponse {
63 pub frozen: bool,
64}
65
66#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
67#[serde(rename_all = "snake_case")]
68pub struct ClassFrozenAccountsResponse {
69 pub pagination: PageResponse,
70 pub accounts: Vec<String>,
71}
72
73#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
74#[serde(rename_all = "snake_case")]
75pub struct WhitelistedResponse {
76 pub whitelisted: bool,
77}
78
79#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
80#[serde(rename_all = "snake_case")]
81pub struct WhitelistedAccountsForNFTResponse {
82 pub pagination: PageResponse,
83 pub accounts: Vec<String>,
84}
85
86#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
87#[serde(rename_all = "snake_case")]
88pub struct ClassWhitelistedAccountsResponse {
89 pub pagination: PageResponse,
90 pub accounts: Vec<String>,
91}
92
93#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
94#[serde(rename_all = "snake_case")]
95pub struct BurntNFTResponse {
96 pub burnt: bool,
97}
98
99#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
100#[serde(rename_all = "snake_case")]
101pub struct BurntNFTsInClassResponse {
102 pub pagination: PageResponse,
103 pub nft_ids: Vec<String>,
104}
105
106#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
107pub enum Msg {
108 IssueClass {
109 name: String,
110 symbol: String,
111 description: Option<String>,
112 uri: Option<String>,
113 uri_hash: Option<String>,
114 data: Option<Binary>,
115 features: Option<Vec<u32>>,
116 royalty_rate: Option<String>,
117 },
118 Mint {
119 class_id: String,
120 id: String,
121 uri: Option<String>,
122 uri_hash: Option<String>,
123 data: Option<Binary>,
124 recipient: Option<String>,
125 },
126 Burn {
127 class_id: String,
128 id: String,
129 },
130 Freeze {
131 class_id: String,
132 id: String,
133 },
134 Unfreeze {
135 class_id: String,
136 id: String,
137 },
138 ClassFreeze {
139 class_id: String,
140 account: String,
141 },
142 ClassUnfreeze {
143 class_id: String,
144 account: String,
145 },
146 AddToWhitelist {
147 class_id: String,
148 id: String,
149 account: String,
150 },
151 RemoveFromWhitelist {
152 class_id: String,
153 id: String,
154 account: String,
155 },
156 AddToClassWhitelist {
157 class_id: String,
158 account: String,
159 },
160 RemoveFromClassWhitelist {
161 class_id: String,
162 account: String,
163 },
164}
165
166#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema, QueryResponses)]
167pub enum Query {
168 #[returns(ParamsResponse)]
169 Params {},
170
171 #[returns(ClassResponse)]
172 Class { id: String },
173
174 #[returns(ClassesResponse)]
175 Classes {
176 pagination: Option<PageRequest>,
177 issuer: String,
178 },
179
180 #[returns(FrozenResponse)]
181 Frozen { id: String, class_id: String },
182
183 #[returns(ClassFrozenResponse)]
184 ClassFrozen { class_id: String, account: String },
185
186 #[returns(ClassFrozenAccountsResponse)]
187 ClassFrozenAccounts {
188 pagination: Option<PageRequest>,
189 class_id: String,
190 },
191
192 #[returns(WhitelistedResponse)]
193 Whitelisted {
194 id: String,
195 class_id: String,
196 account: String,
197 },
198
199 #[returns(WhitelistedAccountsForNFTResponse)]
200 WhitelistedAccountsForNFT {
201 pagination: Option<PageRequest>,
202 id: String,
203 class_id: String,
204 },
205
206 #[returns(ClassWhitelistedAccountsResponse)]
207 ClassWhitelistedAccounts {
208 pagination: Option<PageRequest>,
209 class_id: String,
210 },
211
212 #[returns(BurntNFTResponse)]
213 BurntNFT { class_id: String, nft_id: String },
214
215 #[returns(BurntNFTsInClassResponse)]
216 BurntNFTsInClass {
217 pagination: Option<PageRequest>,
218 class_id: String,
219 },
220}