1use serde::{Deserialize, Serialize};
2
3use crate::models::common::RedactedString;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub struct AffiliateSubItem {
8 #[serde(skip_serializing_if = "Option::is_none")]
9 pub sub_aff_id: Option<String>,
10 #[serde(skip_serializing_if = "Option::is_none")]
11 pub user_id: Option<String>,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub name: Option<String>,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub email: Option<String>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub commissions_vol: Option<std::collections::HashMap<String, String>>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub commissions_for_usdt: Option<String>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub became_aff_time: Option<String>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub start_date: Option<String>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub end_date: Option<String>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
29#[serde(rename_all = "camelCase")]
30pub struct AffiliateSubListResult {
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub list: Option<Vec<AffiliateSubItem>>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub next_page_cursor: Option<String>,
35}
36
37pub type GetAffiliateSubListResponse = AffiliateSubListResult;
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40#[serde(rename_all = "camelCase")]
41pub struct GatewayError {
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub ret_code: Option<i32>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub ret_msg: Option<String>,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49#[serde(rename_all = "camelCase")]
50pub struct AffiliateUserItem {
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub user_id: Option<String>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 pub register_time: Option<String>,
55 #[serde(skip_serializing_if = "Option::is_none")]
56 pub source: Option<String>,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 pub remarks: Option<String>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub is_kyc: Option<bool>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub taker_vol_30_day: Option<String>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub maker_vol_30_day: Option<String>,
65 #[serde(skip_serializing_if = "Option::is_none")]
66 pub trade_vol_30_day: Option<String>,
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub tradfi_trade_vol_30_day: Option<String>,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub commissions_30_day: Option<std::collections::HashMap<String, String>>,
71 #[serde(skip_serializing_if = "Option::is_none")]
72 pub deposit_amount_30_day: Option<String>,
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub deposit_amount_365_day: Option<String>,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub taker_vol_365_day: Option<String>,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub maker_vol_365_day: Option<String>,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub trade_vol_365_day: Option<String>,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub tradfi_trade_vol_365_day: Option<String>,
83 #[serde(skip_serializing_if = "Option::is_none")]
84 pub commissions_365_day: Option<std::collections::HashMap<String, String>>,
85 #[serde(skip_serializing_if = "Option::is_none")]
86 pub taker_vol: Option<String>,
87 #[serde(skip_serializing_if = "Option::is_none")]
88 pub maker_vol: Option<String>,
89 #[serde(skip_serializing_if = "Option::is_none")]
90 pub trade_vol: Option<String>,
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub tradfi_trade_vol: Option<String>,
93 #[serde(skip_serializing_if = "Option::is_none")]
94 pub commissions_vol: Option<std::collections::HashMap<String, String>>,
95 #[serde(skip_serializing_if = "Option::is_none")]
96 pub start_date: Option<String>,
97 #[serde(skip_serializing_if = "Option::is_none")]
98 pub end_date: Option<String>,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize)]
102#[serde(rename_all = "camelCase")]
103pub struct AffiliateUserListResult {
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub list: Option<Vec<AffiliateUserItem>>,
106 #[serde(skip_serializing_if = "Option::is_none")]
107 pub next_page_cursor: Option<String>,
108}
109
110pub type GetAffiliateUserListResponse = AffiliateUserListResult;
111
112#[derive(Debug, Clone, Serialize, Deserialize)]
113#[serde(rename_all = "camelCase")]
114pub struct AffiliateUserInfoResult {
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub uid: Option<String>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub vip_level: Option<String>,
119 #[serde(skip_serializing_if = "Option::is_none")]
120 pub taker_vol_30_day: Option<String>,
121 #[serde(skip_serializing_if = "Option::is_none")]
122 pub maker_vol_30_day: Option<String>,
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub trade_vol_30_day: Option<String>,
125 #[serde(skip_serializing_if = "Option::is_none")]
126 pub deposit_amount_30_day: Option<String>,
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub taker_vol_365_day: Option<String>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub maker_vol_365_day: Option<String>,
131 #[serde(skip_serializing_if = "Option::is_none")]
132 pub trade_vol_365_day: Option<String>,
133 #[serde(skip_serializing_if = "Option::is_none")]
134 pub deposit_amount_365_day: Option<String>,
135 #[serde(skip_serializing_if = "Option::is_none")]
136 pub total_wallet_balance: Option<String>,
137 #[serde(rename = "KycLevel", skip_serializing_if = "Option::is_none")]
138 pub kyc_level: Option<i32>,
139 #[serde(skip_serializing_if = "Option::is_none")]
140 pub commissions_30_day: Option<std::collections::HashMap<String, String>>,
141 #[serde(skip_serializing_if = "Option::is_none")]
142 pub commissions_365_day: Option<std::collections::HashMap<String, String>>,
143 #[serde(skip_serializing_if = "Option::is_none")]
144 pub deposit_update_time: Option<String>,
145 #[serde(skip_serializing_if = "Option::is_none")]
146 pub vol_update_time: Option<String>,
147}
148
149pub type GetAffiliateUserInfoResponse = AffiliateUserInfoResult;
150
151pub type GetAffiliateCustomOpenInfoV5Response = AffiliateCustomOpenInfoResult;
152
153#[derive(Debug, Clone, Serialize, Deserialize)]
154#[serde(rename_all = "camelCase")]
155pub struct AffiliateCustomOpenInfoResult {
156 #[serde(skip_serializing_if = "Option::is_none")]
157 pub uid: Option<String>,
158 #[serde(skip_serializing_if = "Option::is_none")]
159 pub vip_level: Option<String>,
160 #[serde(skip_serializing_if = "Option::is_none")]
161 pub taker_vol_30_day: Option<String>,
162 #[serde(skip_serializing_if = "Option::is_none")]
163 pub maker_vol_30_day: Option<String>,
164 #[serde(skip_serializing_if = "Option::is_none")]
165 pub trade_vol_30_day: Option<String>,
166 #[serde(skip_serializing_if = "Option::is_none")]
167 pub deposit_amount_30_day: Option<String>,
168 #[serde(skip_serializing_if = "Option::is_none")]
169 pub taker_vol_365_day: Option<String>,
170 #[serde(skip_serializing_if = "Option::is_none")]
171 pub maker_vol_365_day: Option<String>,
172 #[serde(skip_serializing_if = "Option::is_none")]
173 pub trade_vol_365_day: Option<String>,
174 #[serde(skip_serializing_if = "Option::is_none")]
175 pub deposit_amount_365_day: Option<String>,
176 #[serde(skip_serializing_if = "Option::is_none")]
177 pub total_wallet_balance: Option<String>,
178 #[serde(skip_serializing_if = "Option::is_none")]
179 pub deposit_update_time: Option<String>,
180 #[serde(skip_serializing_if = "Option::is_none")]
181 pub vol_update_time: Option<String>,
182 #[serde(rename = "KycLevel", skip_serializing_if = "Option::is_none")]
183 pub kyc_level: Option<i32>,
184 #[serde(skip_serializing_if = "Option::is_none")]
185 pub tradfi_trade_vol_30_day: Option<String>,
186 #[serde(skip_serializing_if = "Option::is_none")]
187 pub tradfi_trade_vol_365_day: Option<String>,
188 #[serde(skip_serializing_if = "Option::is_none")]
192 pub commissions_30_day: Option<serde_json::Value>,
193 #[serde(skip_serializing_if = "Option::is_none")]
197 pub commissions_365_day: Option<serde_json::Value>,
198 #[serde(skip_serializing_if = "Option::is_none")]
199 pub pay_send_amount_30_day: Option<String>,
200 #[serde(skip_serializing_if = "Option::is_none")]
201 pub pay_ftt: Option<String>,
202 #[serde(skip_serializing_if = "Option::is_none")]
203 pub card_ftt: Option<String>,
204}
205
206pub type ErrorResponse = serde_json::Value;
207
208#[derive(Debug, Clone, Serialize, Deserialize)]
209#[serde(rename_all = "camelCase")]
210pub struct CreateSubApiKeyParams {
211 pub subuid: i64,
212 pub read_only: i32,
213 #[serde(skip_serializing_if = "Option::is_none")]
214 pub ips: Option<String>,
215 pub permissions: serde_json::Value,
216 #[serde(skip_serializing_if = "Option::is_none")]
217 pub note: Option<String>,
218}
219
220pub type CreateSubApiKeyResponse = serde_json::Value;
221
222#[derive(Debug, Clone, Serialize, Deserialize)]
223#[serde(rename_all = "camelCase")]
224pub struct CreateSubMemberParams {
225 pub username: String,
226 #[serde(skip_serializing_if = "Option::is_none")]
227 pub password: Option<RedactedString>,
228 pub member_type: i32,
229 #[serde(skip_serializing_if = "Option::is_none")]
230 pub switch: Option<i32>,
231 #[serde(skip_serializing_if = "Option::is_none")]
232 pub is_uta: Option<bool>,
233 #[serde(skip_serializing_if = "Option::is_none")]
234 pub note: Option<String>,
235}
236
237pub type CreateSubMemberResponse = serde_json::Value;
238
239#[derive(Debug, Clone, Serialize, Deserialize)]
240#[serde(rename_all = "camelCase")]
241pub struct DeleteApiKeyParams {
242 #[serde(skip_serializing_if = "Option::is_none")]
243 pub apikey: Option<String>,
244}
245
246pub type DeleteApiKeyResponse = serde_json::Value;
247
248#[derive(Debug, Clone, Serialize, Deserialize)]
249#[serde(rename_all = "camelCase")]
250pub struct DeleteSubApiKeyParams {
251 pub subuid: i64,
252 #[serde(skip_serializing_if = "Option::is_none")]
253 pub apikey: Option<String>,
254}
255
256pub type DeleteSubApiKeyResponse = serde_json::Value;
257
258#[derive(Debug, Clone, Serialize, Deserialize)]
259#[serde(rename_all = "camelCase")]
260pub struct DeleteSubMemberV5Params {
261 pub subuid: i64,
262}
263
264pub type DeleteSubMemberV5Response = serde_json::Value;
265
266#[derive(Debug, Clone, Serialize, Deserialize)]
267#[serde(rename_all = "camelCase")]
268pub struct FrozenSubMemberParams {
269 pub subuid: i64,
270 pub frozen: i32,
271}
272
273pub type FrozenSubMemberResponse = serde_json::Value;
274
275pub type ListSubApiKeysV5Response = serde_json::Value;
276
277pub type QueryApiKeyResponse = serde_json::Value;
278
279pub type QueryEscrowSubMembersV5Response = serde_json::Value;
280
281pub type QueryReferralsResponse = serde_json::Value;
282
283#[derive(Debug, Clone, Serialize, Deserialize)]
284#[serde(rename_all = "camelCase")]
285pub struct ReferralRecord {
286 #[serde(skip_serializing_if = "Option::is_none")]
287 pub id: Option<i64>,
288 #[serde(skip_serializing_if = "Option::is_none")]
289 pub invitee_uid: Option<i64>,
290 #[serde(skip_serializing_if = "Option::is_none")]
291 pub status: Option<i32>,
292 #[serde(skip_serializing_if = "Option::is_none")]
293 pub created_at: Option<i64>,
294 #[serde(skip_serializing_if = "Option::is_none")]
295 pub updated_at: Option<i64>,
296}
297
298pub type QuerySubMembersV5Response = serde_json::Value;
299
300pub type QuerySubMembersResponse = serde_json::Value;
301
302#[derive(Debug, Clone, Serialize, Deserialize)]
303#[serde(rename_all = "camelCase")]
304pub struct SignAgreementParams {
305 pub category: i32,
306 pub agree: bool,
307}
308
309pub type SignAgreementResponse = serde_json::Value;
310
311pub type UpdateAPIKeyResponse = serde_json::Value;
312
313pub type UpdateSubAPIKeyResponse = serde_json::Value;
314
315#[derive(Debug, Clone, Serialize, Deserialize)]
316#[serde(rename_all = "camelCase")]
317pub struct UpdateApiKeyParams {
318 #[serde(skip_serializing_if = "Option::is_none")]
319 pub read_only: Option<i32>,
320 #[serde(skip_serializing_if = "Option::is_none")]
321 pub ips: Option<String>,
322 #[serde(skip_serializing_if = "Option::is_none")]
323 pub permissions: Option<ApiKeyPermissions>,
324}
325
326#[derive(Debug, Clone, Serialize, Deserialize)]
327#[serde(rename_all = "camelCase")]
328pub struct UpdateApiKeyResponse {
329 #[serde(default)]
330 pub id: String,
331 #[serde(default)]
332 pub note: String,
333 #[serde(default)]
334 pub api_key: String,
335 #[serde(default)]
336 pub read_only: i32,
337 #[serde(default)]
340 pub secret: RedactedString,
341 #[serde(skip_serializing_if = "Option::is_none")]
342 pub permissions: Option<ApiKeyPermissions>,
343 #[serde(default)]
344 pub ips: Vec<String>,
345}
346
347#[derive(Debug, Clone, Serialize, Deserialize)]
348#[serde(rename_all = "camelCase")]
349pub struct UpdateSubApiKeyParams {
350 pub subuid: i64,
351 #[serde(skip_serializing_if = "Option::is_none")]
352 pub apikey: Option<String>,
353 pub read_only: i32,
354 #[serde(skip_serializing_if = "Option::is_none")]
355 pub ips: Option<String>,
356 #[serde(skip_serializing_if = "Option::is_none")]
357 pub permissions: Option<ApiKeyPermissions>,
358 #[serde(skip_serializing_if = "Option::is_none")]
359 pub note: Option<String>,
360}
361
362#[derive(Debug, Clone, Serialize, Deserialize)]
363#[serde(rename_all = "camelCase")]
364pub struct UpdateSubApiKeyResponse {
365 #[serde(default)]
366 pub id: String,
367 #[serde(default)]
368 pub note: String,
369 #[serde(default)]
370 pub api_key: String,
371 #[serde(default)]
372 pub read_only: i32,
373 #[serde(default)]
376 pub secret: RedactedString,
377 #[serde(skip_serializing_if = "Option::is_none")]
378 pub permissions: Option<ApiKeyPermissions>,
379 #[serde(default)]
380 pub ips: Vec<String>,
381}
382
383#[derive(Debug, Clone, Serialize, Deserialize)]
384pub struct ApiKeyPermissions {
385 #[serde(rename = "ContractTrade", skip_serializing_if = "Option::is_none")]
386 pub contract_trade: Option<Vec<String>>,
387 #[serde(rename = "Spot", skip_serializing_if = "Option::is_none")]
388 pub spot: Option<Vec<String>>,
389 #[serde(rename = "Wallet", skip_serializing_if = "Option::is_none")]
390 pub wallet: Option<Vec<String>>,
391 #[serde(rename = "Options", skip_serializing_if = "Option::is_none")]
392 pub options: Option<Vec<String>>,
393 #[serde(rename = "Derivatives", skip_serializing_if = "Option::is_none")]
394 pub derivatives: Option<Vec<String>>,
395 #[serde(rename = "CopyTrading", skip_serializing_if = "Option::is_none")]
396 pub copy_trading: Option<Vec<String>>,
397 #[serde(rename = "BlockTrade", skip_serializing_if = "Option::is_none")]
398 pub block_trade: Option<Vec<String>>,
399 #[serde(rename = "Exchange", skip_serializing_if = "Option::is_none")]
400 pub exchange: Option<Vec<String>>,
401 #[serde(rename = "NFT", skip_serializing_if = "Option::is_none")]
402 pub nft: Option<Vec<String>>,
403 #[serde(rename = "Affiliate", skip_serializing_if = "Option::is_none")]
404 pub affiliate: Option<Vec<String>>,
405}