1use cosmwasm_schema::cw_serde;
2use cosmwasm_std::Binary;
3use cosmwasm_std::Timestamp;
4use cw_utils::Expiration;
5use sg721::{RoyaltyInfoResponse, UpdateCollectionInfoMsg};
6use sg721_base::msg::QueryMsg as Sg721QueryMsg;
7use sg721_base::ExecuteMsg as Sg721ExecuteMsg;
8
9#[cw_serde]
10pub enum ExecuteMsg<T, E> {
11 FreezeTokenMetadata {},
13 UpdateTokenMetadata {
15 token_id: String,
16 token_uri: Option<String>,
17 },
18 EnableUpdatable {},
20 TransferNft {
22 recipient: String,
23 token_id: String,
24 },
25 SendNft {
26 contract: String,
27 token_id: String,
28 msg: Binary,
29 },
30 Approve {
31 spender: String,
32 token_id: String,
33 expires: Option<Expiration>,
34 },
35 Revoke {
36 spender: String,
37 token_id: String,
38 },
39 ApproveAll {
40 operator: String,
41 expires: Option<Expiration>,
42 },
43 RevokeAll {
44 operator: String,
45 },
46 Burn {
47 token_id: String,
48 },
49 UpdateCollectionInfo {
50 collection_info: UpdateCollectionInfoMsg<RoyaltyInfoResponse>,
51 },
52 UpdateStartTradingTime(Option<Timestamp>),
53 FreezeCollectionInfo {},
54 Mint {
55 token_id: String,
57 owner: String,
59 token_uri: Option<String>,
63 extension: T,
65 },
66 Extension {
67 msg: E,
68 },
69}
70
71impl<T, E> From<ExecuteMsg<T, E>> for Sg721ExecuteMsg
72where
73 T: Clone + PartialEq + Into<Option<cosmwasm_std::Empty>>,
74 Option<cosmwasm_std::Empty>: From<T>,
75{
76 fn from(msg: ExecuteMsg<T, E>) -> Sg721ExecuteMsg {
77 match msg {
78 ExecuteMsg::TransferNft {
79 recipient,
80 token_id,
81 } => Sg721ExecuteMsg::TransferNft {
82 recipient,
83 token_id,
84 },
85 ExecuteMsg::SendNft {
86 contract,
87 token_id,
88 msg,
89 } => Sg721ExecuteMsg::SendNft {
90 contract,
91 token_id,
92 msg,
93 },
94 ExecuteMsg::Approve {
95 spender,
96 token_id,
97 expires,
98 } => Sg721ExecuteMsg::Approve {
99 spender,
100 token_id,
101 expires,
102 },
103 ExecuteMsg::ApproveAll { operator, expires } => {
104 Sg721ExecuteMsg::ApproveAll { operator, expires }
105 }
106 ExecuteMsg::Revoke { spender, token_id } => {
107 Sg721ExecuteMsg::Revoke { spender, token_id }
108 }
109 ExecuteMsg::RevokeAll { operator } => Sg721ExecuteMsg::RevokeAll { operator },
110 ExecuteMsg::Burn { token_id } => Sg721ExecuteMsg::Burn { token_id },
111 ExecuteMsg::UpdateCollectionInfo { collection_info } => {
112 Sg721ExecuteMsg::UpdateCollectionInfo { collection_info }
113 }
114 ExecuteMsg::FreezeCollectionInfo {} => Sg721ExecuteMsg::FreezeCollectionInfo {},
115 ExecuteMsg::Mint {
116 token_id,
117 owner,
118 token_uri,
119 extension,
120 } => Sg721ExecuteMsg::Mint {
121 token_id,
122 owner,
123 token_uri,
124 extension: extension.into(),
125 },
126 ExecuteMsg::UpdateStartTradingTime(start_trading_time) => {
127 Sg721ExecuteMsg::UpdateStartTradingTime(start_trading_time)
128 }
129 _ => unreachable!("Invalid ExecuteMsg"),
130 }
131 }
132}
133
134#[cw_serde]
135pub enum QueryMsg {
136 EnableUpdatable {},
137 EnableUpdatableFee {},
138 FreezeTokenMetadata {},
139 OwnerOf {
140 token_id: String,
141 include_expired: Option<bool>,
142 },
143 Approval {
144 token_id: String,
145 spender: String,
146 include_expired: Option<bool>,
147 },
148 Approvals {
149 token_id: String,
150 include_expired: Option<bool>,
151 },
152 AllOperators {
153 owner: String,
154 include_expired: Option<bool>,
155 start_after: Option<String>,
156 limit: Option<u32>,
157 },
158 NumTokens {},
159 ContractInfo {},
160 NftInfo {
161 token_id: String,
162 },
163 AllNftInfo {
164 token_id: String,
165 include_expired: Option<bool>,
166 },
167 Tokens {
168 owner: String,
169 start_after: Option<String>,
170 limit: Option<u32>,
171 },
172 AllTokens {
173 start_after: Option<String>,
174 limit: Option<u32>,
175 },
176 Minter {},
177 CollectionInfo {},
178}
179
180impl From<QueryMsg> for Sg721QueryMsg {
181 fn from(msg: QueryMsg) -> Sg721QueryMsg {
182 match msg {
183 QueryMsg::OwnerOf {
184 token_id,
185 include_expired,
186 } => Sg721QueryMsg::OwnerOf {
187 token_id,
188 include_expired,
189 },
190 QueryMsg::Approval {
191 token_id,
192 spender,
193 include_expired,
194 } => Sg721QueryMsg::Approval {
195 token_id,
196 spender,
197 include_expired,
198 },
199 QueryMsg::Approvals {
200 token_id,
201 include_expired,
202 } => Sg721QueryMsg::Approvals {
203 token_id,
204 include_expired,
205 },
206 QueryMsg::AllOperators {
207 owner,
208 include_expired,
209 start_after,
210 limit,
211 } => Sg721QueryMsg::AllOperators {
212 owner,
213 include_expired,
214 start_after,
215 limit,
216 },
217 QueryMsg::NumTokens {} => Sg721QueryMsg::NumTokens {},
218 QueryMsg::ContractInfo {} => Sg721QueryMsg::ContractInfo {},
219 QueryMsg::NftInfo { token_id } => Sg721QueryMsg::NftInfo { token_id },
220 QueryMsg::AllNftInfo {
221 token_id,
222 include_expired,
223 } => Sg721QueryMsg::AllNftInfo {
224 token_id,
225 include_expired,
226 },
227 QueryMsg::Tokens {
228 owner,
229 start_after,
230 limit,
231 } => Sg721QueryMsg::Tokens {
232 owner,
233 start_after,
234 limit,
235 },
236 QueryMsg::AllTokens { start_after, limit } => {
237 Sg721QueryMsg::AllTokens { start_after, limit }
238 }
239 QueryMsg::Minter {} => Sg721QueryMsg::Minter {},
240 QueryMsg::CollectionInfo {} => Sg721QueryMsg::CollectionInfo {},
241 _ => unreachable!("cannot convert {:?} to Sg721QueryMsg", msg),
242 }
243 }
244}
245
246#[cw_serde]
247pub struct EnableUpdatableResponse {
248 pub enabled: bool,
249}
250
251#[cw_serde]
252pub struct FrozenTokenMetadataResponse {
253 pub frozen: bool,
254}