1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4#[serde(rename_all = "camelCase")]
5pub struct PaginatedList {
6 #[serde(skip_serializing_if = "Option::is_none")]
7 pub next_page_cursor: Option<String>,
8}
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
11#[serde(rename_all = "camelCase")]
12pub struct DualAssetsProduct {
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub category: Option<String>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub product_id: Option<String>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub base_coin: Option<String>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub quote_coin: Option<String>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub expect_receive_at: Option<String>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub duration: Option<String>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub status: Option<String>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub is_vip_product: Option<bool>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub subscribe_start_at: Option<String>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub subscribe_end_at: Option<String>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub apply_start_at: Option<String>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub settlement_time: Option<String>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub min_purchase_quote_amount: Option<String>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub min_purchase_base_amount: Option<String>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub remaining_amount_quote: Option<String>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub remaining_amount_base: Option<String>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub order_precision_digital_quote: Option<i32>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub order_precision_digital_base: Option<i32>,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(rename_all = "camelCase")]
53pub struct GetAdvanceProductResult {
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub category: Option<String>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub list: Option<Vec<DualAssetsProduct>>,
58}
59
60pub type GetAdvanceEarnProductResponse = GetAdvanceProductResult;
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
63#[serde(rename_all = "camelCase")]
64pub struct PriceQuote {
65 #[serde(skip_serializing_if = "Option::is_none")]
66 pub select_price: Option<String>,
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub apy_e8: Option<i64>,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub max_investment_amount: Option<String>,
71 #[serde(skip_serializing_if = "Option::is_none")]
72 pub expired_at: Option<String>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct ProductOffer {
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub product_id: Option<String>,
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub current_price: Option<String>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub buy_low_price: Option<Vec<PriceQuote>>,
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub sell_high_price: Option<Vec<PriceQuote>>,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub struct GetProductExtraInfoResult {
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub category: Option<String>,
93 #[serde(skip_serializing_if = "Option::is_none")]
94 pub list: Option<Vec<ProductOffer>>,
95}
96
97pub type GetAdvanceEarnProductExtraInfoResponse = GetProductExtraInfoResult;
98
99#[derive(Debug, Clone, Serialize, Deserialize)]
100#[serde(rename_all = "camelCase")]
101pub struct DualAssetsExtra {
102 pub order_direction: String,
103 pub select_price: String,
104 pub apy_e8: i64,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
108#[serde(rename_all = "camelCase")]
109pub struct InterestCard {
110 #[serde(skip_serializing_if = "Option::is_none")]
111 pub award_id: Option<i64>,
112 #[serde(skip_serializing_if = "Option::is_none")]
113 pub spec_code: Option<String>,
114}
115
116#[derive(Debug, Clone, Serialize, Deserialize)]
117#[serde(rename_all = "camelCase")]
118pub struct SmartLeverageStakeExtra {
119 pub initial_price: String,
120 pub breakeven_price: String,
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
124#[serde(rename_all = "camelCase")]
125pub struct SmartLeverageRedeemExtra {
126 pub position_id: String,
127 pub est_redeem_amount: String,
128 #[serde(skip_serializing_if = "Option::is_none")]
129 pub is_slippage_protected: Option<bool>,
130}
131
132#[derive(Debug, Clone, Serialize, Deserialize)]
133#[serde(rename_all = "camelCase")]
134pub struct PlaceAdvanceEarnOrderParams {
135 pub category: String,
136 pub product_id: i64,
137 pub order_type: String,
138 pub amount: String,
139 pub account_type: String,
140 pub coin: String,
141 pub order_link_id: String,
142 #[serde(skip_serializing_if = "Option::is_none")]
143 pub dual_assets_extra: Option<DualAssetsExtra>,
144 #[serde(skip_serializing_if = "Option::is_none")]
145 pub interest_card: Option<InterestCard>,
146 #[serde(skip_serializing_if = "Option::is_none")]
147 pub smart_leverage_stake_extra: Option<SmartLeverageStakeExtra>,
148 #[serde(skip_serializing_if = "Option::is_none")]
149 pub smart_leverage_redeem_extra: Option<SmartLeverageRedeemExtra>,
150 #[serde(skip_serializing_if = "Option::is_none")]
154 pub double_win_stake_extra: Option<serde_json::Value>,
155 #[serde(skip_serializing_if = "Option::is_none")]
159 pub double_win_redeem_extra: Option<serde_json::Value>,
160 #[serde(skip_serializing_if = "Option::is_none")]
164 pub discount_buy_extra: Option<serde_json::Value>,
165}
166
167#[derive(Debug, Clone, Serialize, Deserialize)]
168#[serde(rename_all = "camelCase")]
169pub struct PlaceAdvanceOrderResult {
170 #[serde(skip_serializing_if = "Option::is_none")]
171 pub order_id: Option<String>,
172 #[serde(skip_serializing_if = "Option::is_none")]
173 pub order_link_id: Option<String>,
174}
175
176pub type PlaceAdvanceEarnOrderResponse = PlaceAdvanceOrderResult;
177
178#[derive(Debug, Clone, Serialize, Deserialize)]
179#[serde(rename_all = "camelCase")]
180pub struct DualAssetsPosition {
181 #[serde(skip_serializing_if = "Option::is_none")]
182 pub position_id: Option<String>,
183 #[serde(skip_serializing_if = "Option::is_none")]
184 pub product_id: Option<String>,
185 #[serde(skip_serializing_if = "Option::is_none")]
186 pub category: Option<String>,
187 #[serde(skip_serializing_if = "Option::is_none")]
188 pub base_coin: Option<String>,
189 #[serde(skip_serializing_if = "Option::is_none")]
190 pub quote_coin: Option<String>,
191 #[serde(skip_serializing_if = "Option::is_none")]
192 pub invest_coin: Option<String>,
193 #[serde(skip_serializing_if = "Option::is_none")]
194 pub amount: Option<String>,
195 #[serde(skip_serializing_if = "Option::is_none")]
196 pub apy_e8: Option<String>,
197 #[serde(skip_serializing_if = "Option::is_none")]
198 pub direction: Option<String>,
199 #[serde(skip_serializing_if = "Option::is_none")]
200 pub target_price: Option<String>,
201 #[serde(skip_serializing_if = "Option::is_none")]
202 pub settlement_time: Option<String>,
203 #[serde(skip_serializing_if = "Option::is_none")]
204 pub status: Option<String>,
205 #[serde(skip_serializing_if = "Option::is_none")]
206 pub order_id: Option<String>,
207 #[serde(skip_serializing_if = "Option::is_none")]
208 pub duration: Option<String>,
209 #[serde(skip_serializing_if = "Option::is_none")]
210 pub expect_return_coin: Option<String>,
211 #[serde(skip_serializing_if = "Option::is_none")]
212 pub expect_return_amount: Option<String>,
213 #[serde(skip_serializing_if = "Option::is_none")]
214 pub account_type: Option<String>,
215 #[serde(skip_serializing_if = "Option::is_none")]
216 pub to_account_type: Option<String>,
217 #[serde(skip_serializing_if = "Option::is_none")]
218 pub yield_start_at: Option<String>,
219 #[serde(skip_serializing_if = "Option::is_none")]
220 pub yield_end_at: Option<String>,
221}
222
223#[derive(Debug, Clone, Serialize, Deserialize)]
224#[serde(rename_all = "camelCase")]
225pub struct GetAdvancePositionResult {
226 #[serde(skip_serializing_if = "Option::is_none")]
227 pub next_page_cursor: Option<String>,
228 #[serde(skip_serializing_if = "Option::is_none")]
229 pub category: Option<String>,
230 #[serde(skip_serializing_if = "Option::is_none")]
231 pub list: Option<Vec<DualAssetsPosition>>,
232}
233
234pub type GetAdvanceEarnPositionResponse = GetAdvancePositionResult;
235
236#[derive(Debug, Clone, Serialize, Deserialize)]
237#[serde(rename_all = "camelCase")]
238pub struct DualAssetsOrder {
239 #[serde(skip_serializing_if = "Option::is_none")]
240 pub order_id: Option<String>,
241 #[serde(skip_serializing_if = "Option::is_none")]
242 pub order_link_id: Option<String>,
243 #[serde(skip_serializing_if = "Option::is_none")]
244 pub product_id: Option<String>,
245 #[serde(skip_serializing_if = "Option::is_none")]
246 pub category: Option<String>,
247 #[serde(skip_serializing_if = "Option::is_none")]
248 pub order_type: Option<String>,
249 #[serde(skip_serializing_if = "Option::is_none")]
250 pub amount: Option<String>,
251 #[serde(skip_serializing_if = "Option::is_none")]
252 pub coin: Option<String>,
253 #[serde(skip_serializing_if = "Option::is_none")]
254 pub base_coin: Option<String>,
255 #[serde(skip_serializing_if = "Option::is_none")]
256 pub quote_coin: Option<String>,
257 #[serde(skip_serializing_if = "Option::is_none")]
258 pub status: Option<String>,
259 #[serde(skip_serializing_if = "Option::is_none")]
260 pub created_time: Option<String>,
261 #[serde(skip_serializing_if = "Option::is_none")]
262 pub updated_time: Option<String>,
263 #[serde(skip_serializing_if = "Option::is_none")]
264 pub direction: Option<String>,
265 #[serde(skip_serializing_if = "Option::is_none")]
266 pub target_price: Option<String>,
267 #[serde(skip_serializing_if = "Option::is_none")]
268 pub settlement_time: Option<String>,
269 #[serde(skip_serializing_if = "Option::is_none")]
270 pub estimate_apy_e8: Option<String>,
271 #[serde(skip_serializing_if = "Option::is_none")]
272 pub duration: Option<String>,
273 #[serde(skip_serializing_if = "Option::is_none")]
274 pub account_type: Option<String>,
275 #[serde(skip_serializing_if = "Option::is_none")]
276 pub to_account_type: Option<String>,
277 #[serde(skip_serializing_if = "Option::is_none")]
278 pub select_apy_e8: Option<String>,
279 #[serde(skip_serializing_if = "Option::is_none")]
280 pub is_vip: Option<bool>,
281 #[serde(skip_serializing_if = "Option::is_none")]
282 pub settlement_coin: Option<String>,
283 #[serde(skip_serializing_if = "Option::is_none")]
284 pub settlement_amount: Option<String>,
285 #[serde(skip_serializing_if = "Option::is_none")]
286 pub order_mode: Option<String>,
287 #[serde(skip_serializing_if = "Option::is_none")]
288 pub settlement_price: Option<String>,
289 #[serde(skip_serializing_if = "Option::is_none")]
290 pub refund_status: Option<String>,
291 #[serde(skip_serializing_if = "Option::is_none")]
292 pub trial_bonus_amount: Option<String>,
293 #[serde(skip_serializing_if = "Option::is_none")]
294 pub trial_bonus_pnl: Option<String>,
295}
296
297#[derive(Debug, Clone, Serialize, Deserialize)]
298#[serde(rename_all = "camelCase")]
299pub struct GetAdvanceOrderResult {
300 #[serde(skip_serializing_if = "Option::is_none")]
301 pub next_page_cursor: Option<String>,
302 #[serde(skip_serializing_if = "Option::is_none")]
303 pub category: Option<String>,
304 #[serde(skip_serializing_if = "Option::is_none")]
305 pub list: Option<Vec<DualAssetsOrder>>,
306}
307
308pub type GetAdvanceEarnOrderResponse = GetAdvanceOrderResult;
309
310#[derive(Debug, Clone, Serialize, Deserialize)]
311#[serde(rename_all = "camelCase")]
312pub struct SmartLeverageProduct {
313 #[serde(skip_serializing_if = "Option::is_none")]
314 pub category: Option<String>,
315 #[serde(skip_serializing_if = "Option::is_none")]
316 pub product_id: Option<String>,
317 #[serde(skip_serializing_if = "Option::is_none")]
318 pub invest_coin: Option<String>,
319 #[serde(skip_serializing_if = "Option::is_none")]
320 pub underlying_asset: Option<String>,
321 #[serde(skip_serializing_if = "Option::is_none")]
322 pub direction: Option<String>,
323 #[serde(skip_serializing_if = "Option::is_none")]
324 pub leverage: Option<String>,
325 #[serde(skip_serializing_if = "Option::is_none")]
326 pub duration: Option<String>,
327 #[serde(skip_serializing_if = "Option::is_none")]
328 pub expect_receive_at: Option<String>,
329 #[serde(skip_serializing_if = "Option::is_none")]
330 pub subscribe_start_at: Option<String>,
331 #[serde(skip_serializing_if = "Option::is_none")]
332 pub subscribe_end_at: Option<String>,
333 #[serde(skip_serializing_if = "Option::is_none")]
334 pub settlement_time: Option<String>,
335 #[serde(skip_serializing_if = "Option::is_none")]
336 pub min_purchase_amount: Option<String>,
337 #[serde(skip_serializing_if = "Option::is_none")]
338 pub remaining_amount: Option<String>,
339 #[serde(skip_serializing_if = "Option::is_none")]
340 pub order_precision_digital: Option<i32>,
341}
342
343#[derive(Debug, Clone, Serialize, Deserialize)]
344#[serde(rename_all = "camelCase")]
345pub struct GetSmartLeverageProductResult {
346 #[serde(skip_serializing_if = "Option::is_none")]
347 pub category: Option<String>,
348 #[serde(skip_serializing_if = "Option::is_none")]
349 pub list: Option<Vec<SmartLeverageProduct>>,
350}
351
352pub type GetSmartLeverageProductResponse = GetSmartLeverageProductResult;
353
354#[derive(Debug, Clone, Serialize, Deserialize)]
355#[serde(rename_all = "camelCase")]
356pub struct SmartLeverageProductExtraInfo {
357 #[serde(skip_serializing_if = "Option::is_none")]
358 pub category: Option<String>,
359 #[serde(skip_serializing_if = "Option::is_none")]
360 pub product_id: Option<String>,
361 #[serde(skip_serializing_if = "Option::is_none")]
362 pub breakeven_price: Option<String>,
363 #[serde(skip_serializing_if = "Option::is_none")]
364 pub current_price: Option<String>,
365 #[serde(skip_serializing_if = "Option::is_none")]
366 pub expire_at: Option<String>,
367 #[serde(skip_serializing_if = "Option::is_none")]
368 pub max_investment_amount: Option<String>,
369}
370
371pub type GetSmartLeverageProductExtraInfoResponse = SmartLeverageProductExtraInfo;
372
373#[derive(Debug, Clone, Serialize, Deserialize)]
374#[serde(rename_all = "camelCase")]
375pub struct SmartLeveragePosition {
376 #[serde(skip_serializing_if = "Option::is_none")]
377 pub position_id: Option<String>,
378 #[serde(skip_serializing_if = "Option::is_none")]
379 pub product_id: Option<String>,
380 #[serde(skip_serializing_if = "Option::is_none")]
381 pub category: Option<String>,
382 #[serde(skip_serializing_if = "Option::is_none")]
383 pub invest_coin: Option<String>,
384 #[serde(skip_serializing_if = "Option::is_none")]
385 pub underlying_asset: Option<String>,
386 #[serde(skip_serializing_if = "Option::is_none")]
387 pub direction: Option<String>,
388 #[serde(skip_serializing_if = "Option::is_none")]
389 pub leverage: Option<String>,
390 #[serde(skip_serializing_if = "Option::is_none")]
391 pub amount: Option<String>,
392 #[serde(skip_serializing_if = "Option::is_none")]
393 pub breakeven_price: Option<String>,
394 #[serde(skip_serializing_if = "Option::is_none")]
395 pub initial_price: Option<String>,
396 #[serde(skip_serializing_if = "Option::is_none")]
397 pub duration: Option<String>,
398 #[serde(skip_serializing_if = "Option::is_none")]
399 pub settlement_time: Option<String>,
400 #[serde(skip_serializing_if = "Option::is_none")]
401 pub created_time: Option<String>,
402 #[serde(skip_serializing_if = "Option::is_none")]
403 pub status: Option<String>,
404 #[serde(skip_serializing_if = "Option::is_none")]
405 pub redeemable: Option<bool>,
406 #[serde(skip_serializing_if = "Option::is_none")]
407 pub account_type: Option<String>,
408 #[serde(skip_serializing_if = "Option::is_none")]
409 pub order_link_id: Option<String>,
410 #[serde(skip_serializing_if = "Option::is_none")]
411 pub order_id: Option<String>,
412}
413
414#[derive(Debug, Clone, Serialize, Deserialize)]
415#[serde(rename_all = "camelCase")]
416pub struct GetSmartLeveragePositionResult {
417 #[serde(skip_serializing_if = "Option::is_none")]
418 pub next_page_cursor: Option<String>,
419 #[serde(skip_serializing_if = "Option::is_none")]
420 pub category: Option<String>,
421 #[serde(skip_serializing_if = "Option::is_none")]
422 pub list: Option<Vec<SmartLeveragePosition>>,
423}
424
425pub type GetSmartLeveragePositionResponse = GetSmartLeveragePositionResult;
426
427#[derive(Debug, Clone, Serialize, Deserialize)]
428#[serde(rename_all = "camelCase")]
429pub struct SmartLeverageOrder {
430 #[serde(skip_serializing_if = "Option::is_none")]
431 pub order_id: Option<String>,
432 #[serde(skip_serializing_if = "Option::is_none")]
433 pub order_link_id: Option<String>,
434 #[serde(skip_serializing_if = "Option::is_none")]
435 pub product_id: Option<String>,
436 #[serde(skip_serializing_if = "Option::is_none")]
437 pub category: Option<String>,
438 #[serde(skip_serializing_if = "Option::is_none")]
439 pub order_type: Option<String>,
440 #[serde(skip_serializing_if = "Option::is_none")]
441 pub invest_coin: Option<String>,
442 #[serde(skip_serializing_if = "Option::is_none")]
443 pub amount: Option<String>,
444 #[serde(skip_serializing_if = "Option::is_none")]
445 pub underlying_asset: Option<String>,
446 #[serde(skip_serializing_if = "Option::is_none")]
447 pub direction: Option<String>,
448 #[serde(skip_serializing_if = "Option::is_none")]
449 pub leverage: Option<String>,
450 #[serde(skip_serializing_if = "Option::is_none")]
451 pub breakeven_price: Option<String>,
452 #[serde(skip_serializing_if = "Option::is_none")]
453 pub initial_price: Option<String>,
454 #[serde(skip_serializing_if = "Option::is_none")]
455 pub settlement_time: Option<String>,
456 #[serde(skip_serializing_if = "Option::is_none")]
457 pub duration: Option<String>,
458 #[serde(skip_serializing_if = "Option::is_none")]
459 pub created_time: Option<String>,
460 #[serde(skip_serializing_if = "Option::is_none")]
461 pub status: Option<String>,
462 #[serde(skip_serializing_if = "Option::is_none")]
463 pub settlement_price: Option<String>,
464 #[serde(skip_serializing_if = "Option::is_none")]
465 pub pnl: Option<String>,
466 #[serde(skip_serializing_if = "Option::is_none")]
467 pub refund_status: Option<String>,
468 #[serde(skip_serializing_if = "Option::is_none")]
469 pub account_type: Option<String>,
470 #[serde(skip_serializing_if = "Option::is_none")]
471 pub to_account_type: Option<String>,
472}
473
474#[derive(Debug, Clone, Serialize, Deserialize)]
475#[serde(rename_all = "camelCase")]
476pub struct GetSmartLeverageOrderResult {
477 #[serde(skip_serializing_if = "Option::is_none")]
478 pub next_page_cursor: Option<String>,
479 #[serde(skip_serializing_if = "Option::is_none")]
480 pub category: Option<String>,
481 #[serde(skip_serializing_if = "Option::is_none")]
482 pub list: Option<Vec<SmartLeverageOrder>>,
483}
484
485pub type GetSmartLeverageOrderResponse = GetSmartLeverageOrderResult;
486
487#[derive(Debug, Clone, Serialize, Deserialize)]
488#[serde(rename_all = "camelCase")]
489pub struct GetRedeemEstAmountListResult {
490 #[serde(skip_serializing_if = "Option::is_none")]
491 pub category: Option<String>,
492 #[serde(skip_serializing_if = "Option::is_none")]
493 pub list: Option<Vec<serde_json::Value>>,
494}
495
496pub type GetRedeemEstAmountListResponse = GetRedeemEstAmountListResult;
497
498#[derive(Debug, Clone, Serialize, Deserialize)]
499#[serde(rename_all = "camelCase")]
500pub struct GetDoubleWinLeverageResult {
501 #[serde(skip_serializing_if = "Option::is_none")]
502 pub product_id: Option<String>,
503 #[serde(skip_serializing_if = "Option::is_none")]
504 pub leverage: Option<String>,
505 #[serde(skip_serializing_if = "Option::is_none")]
506 pub initial_price: Option<String>,
507 #[serde(skip_serializing_if = "Option::is_none")]
508 pub lower_price: Option<String>,
509 #[serde(skip_serializing_if = "Option::is_none")]
510 pub upper_price: Option<String>,
511}
512
513pub type GetDoubleWinLeverageResponse = GetDoubleWinLeverageResult;
514
515#[derive(Debug, Clone, Serialize, Deserialize)]
516#[serde(rename_all = "camelCase")]
517pub struct PlaceTokenOrderParams {
518 pub coin: String,
519 pub order_link_id: String,
520 pub order_type: String,
521 pub amount: String,
522 pub account_type: String,
523}
524
525#[derive(Debug, Clone, Serialize, Deserialize)]
526#[serde(rename_all = "camelCase")]
527pub struct PlaceTokenOrderResult {
528 #[serde(skip_serializing_if = "Option::is_none")]
529 pub order_id: Option<String>,
530 #[serde(skip_serializing_if = "Option::is_none")]
531 pub order_link_id: Option<String>,
532}
533
534pub type PlaceTokenOrderResponse = PlaceTokenOrderResult;
535
536#[derive(Debug, Clone, Serialize, Deserialize)]
537#[serde(rename_all = "camelCase")]
538pub struct TokenOrder {
539 #[serde(skip_serializing_if = "Option::is_none")]
540 pub order_id: Option<String>,
541 #[serde(skip_serializing_if = "Option::is_none")]
542 pub order_link_id: Option<String>,
543 #[serde(skip_serializing_if = "Option::is_none")]
544 pub coin: Option<String>,
545 #[serde(skip_serializing_if = "Option::is_none")]
546 pub order_type: Option<String>,
547 #[serde(skip_serializing_if = "Option::is_none")]
548 pub amount: Option<String>,
549 #[serde(skip_serializing_if = "Option::is_none")]
550 pub account_type: Option<String>,
551 #[serde(skip_serializing_if = "Option::is_none")]
552 pub status: Option<String>,
553 #[serde(skip_serializing_if = "Option::is_none")]
554 pub created_time: Option<String>,
555 #[serde(skip_serializing_if = "Option::is_none")]
556 pub updated_time: Option<String>,
557}
558
559#[derive(Debug, Clone, Serialize, Deserialize)]
560#[serde(rename_all = "camelCase")]
561pub struct TokenOrderListResult {
562 #[serde(skip_serializing_if = "Option::is_none")]
563 pub next_page_cursor: Option<String>,
564 #[serde(skip_serializing_if = "Option::is_none")]
565 pub list: Option<Vec<TokenOrder>>,
566}
567
568pub type TokenOrderListResponse = TokenOrderListResult;
569
570#[derive(Debug, Clone, Serialize, Deserialize)]
571#[serde(rename_all = "camelCase")]
572pub struct TokenProduct {
573 #[serde(skip_serializing_if = "Option::is_none")]
574 pub coin: Option<String>,
575 #[serde(skip_serializing_if = "Option::is_none")]
576 pub status: Option<String>,
577 #[serde(skip_serializing_if = "Option::is_none")]
578 pub apr: Option<String>,
579 #[serde(skip_serializing_if = "Option::is_none")]
580 pub min_purchase_amount: Option<String>,
581 #[serde(skip_serializing_if = "Option::is_none")]
582 pub max_purchase_amount: Option<String>,
583}
584
585pub type TokenProductResponse = TokenProduct;
586
587#[derive(Debug, Clone, Serialize, Deserialize)]
588#[serde(rename_all = "camelCase")]
589pub struct TokenPosition {
590 #[serde(skip_serializing_if = "Option::is_none")]
591 pub coin: Option<String>,
592 #[serde(skip_serializing_if = "Option::is_none")]
593 pub amount: Option<String>,
594 #[serde(skip_serializing_if = "Option::is_none")]
595 pub principal: Option<String>,
596 #[serde(skip_serializing_if = "Option::is_none")]
597 pub yield_amount: Option<String>,
598 #[serde(skip_serializing_if = "Option::is_none")]
599 pub account_type: Option<String>,
600}
601
602pub type TokenPositionResponse = TokenPosition;
603
604#[derive(Debug, Clone, Serialize, Deserialize)]
605#[serde(rename_all = "camelCase")]
606pub struct TokenDailyYield {
607 #[serde(skip_serializing_if = "Option::is_none")]
608 pub coin: Option<String>,
609 #[serde(skip_serializing_if = "Option::is_none")]
610 pub yield_amount: Option<String>,
611 #[serde(skip_serializing_if = "Option::is_none")]
612 pub yield_date: Option<String>,
613}
614
615#[derive(Debug, Clone, Serialize, Deserialize)]
616#[serde(rename_all = "camelCase")]
617pub struct TokenDailyYieldResult {
618 #[serde(skip_serializing_if = "Option::is_none")]
619 pub next_page_cursor: Option<String>,
620 #[serde(skip_serializing_if = "Option::is_none")]
621 pub list: Option<Vec<TokenDailyYield>>,
622}
623
624pub type TokenDailyYieldResponse = TokenDailyYieldResult;
625
626#[derive(Debug, Clone, Serialize, Deserialize)]
627#[serde(rename_all = "camelCase")]
628pub struct TokenHourlyYield {
629 #[serde(skip_serializing_if = "Option::is_none")]
630 pub coin: Option<String>,
631 #[serde(skip_serializing_if = "Option::is_none")]
632 pub yield_amount: Option<String>,
633 #[serde(skip_serializing_if = "Option::is_none")]
634 pub yield_time: Option<String>,
635}
636
637#[derive(Debug, Clone, Serialize, Deserialize)]
638#[serde(rename_all = "camelCase")]
639pub struct TokenHourlyYieldResult {
640 #[serde(skip_serializing_if = "Option::is_none")]
641 pub next_page_cursor: Option<String>,
642 #[serde(skip_serializing_if = "Option::is_none")]
643 pub list: Option<Vec<TokenHourlyYield>>,
644}
645
646pub type TokenHourlyYieldResponse = TokenHourlyYieldResult;
647
648#[derive(Debug, Clone, Serialize, Deserialize)]
649#[serde(rename_all = "camelCase")]
650pub struct TokenAprHistory {
651 #[serde(skip_serializing_if = "Option::is_none")]
652 pub coin: Option<String>,
653 #[serde(skip_serializing_if = "Option::is_none")]
654 pub apr: Option<String>,
655 #[serde(skip_serializing_if = "Option::is_none")]
656 pub apr_date: Option<String>,
657}
658
659#[derive(Debug, Clone, Serialize, Deserialize)]
660#[serde(rename_all = "camelCase")]
661pub struct TokenAprHistoryResult {
662 #[serde(skip_serializing_if = "Option::is_none")]
663 pub list: Option<Vec<TokenAprHistory>>,
664}
665
666pub type TokenAprHistoryResponse = TokenAprHistoryResult;
667
668#[derive(Debug, Clone, Serialize, Deserialize)]
669#[serde(rename_all = "camelCase")]
670pub struct FixedTermProduct {
671 #[serde(skip_serializing_if = "Option::is_none")]
672 pub product_id: Option<String>,
673 #[serde(skip_serializing_if = "Option::is_none")]
674 pub coin: Option<String>,
675 #[serde(skip_serializing_if = "Option::is_none")]
676 pub duration: Option<String>,
677 #[serde(skip_serializing_if = "Option::is_none")]
678 pub apr: Option<String>,
679 #[serde(skip_serializing_if = "Option::is_none")]
680 pub min_purchase_amount: Option<String>,
681 #[serde(skip_serializing_if = "Option::is_none")]
682 pub max_purchase_amount: Option<String>,
683 #[serde(skip_serializing_if = "Option::is_none")]
684 pub status: Option<String>,
685}
686
687#[derive(Debug, Clone, Serialize, Deserialize)]
688#[serde(rename_all = "camelCase")]
689pub struct GetFixedTermProductResult {
690 #[serde(skip_serializing_if = "Option::is_none")]
691 pub list: Option<Vec<FixedTermProduct>>,
692}
693
694pub type GetFixedTermProductResponse = GetFixedTermProductResult;
695
696#[derive(Debug, Clone, Serialize, Deserialize)]
697#[serde(rename_all = "camelCase")]
698pub struct RedeemEstItem {
699 #[serde(skip_serializing_if = "Option::is_none")]
700 pub success: Option<bool>,
701 #[serde(skip_serializing_if = "Option::is_none")]
702 pub position_id: Option<String>,
703 #[serde(skip_serializing_if = "Option::is_none")]
704 pub est_redeem_amount: Option<String>,
705 #[serde(skip_serializing_if = "Option::is_none")]
706 pub est_redeem_time: Option<String>,
707 #[serde(skip_serializing_if = "Option::is_none")]
708 pub slippage_rate: Option<String>,
709}
710
711pub type GetSmartLeverageRedeemEstAmountListResponse = GetRedeemEstAmountListResult;
712
713#[derive(Debug, Clone, Serialize, Deserialize)]
714#[serde(rename_all = "camelCase")]
715pub struct DoubleWinProduct {
716 #[serde(skip_serializing_if = "Option::is_none")]
717 pub category: Option<String>,
718 #[serde(skip_serializing_if = "Option::is_none")]
719 pub product_id: Option<String>,
720 #[serde(skip_serializing_if = "Option::is_none")]
721 pub invest_coin: Option<String>,
722 #[serde(skip_serializing_if = "Option::is_none")]
723 pub underlying_asset: Option<String>,
724 #[serde(skip_serializing_if = "Option::is_none")]
725 pub duration: Option<String>,
726 #[serde(skip_serializing_if = "Option::is_none")]
727 pub expect_receive_at: Option<String>,
728 #[serde(skip_serializing_if = "Option::is_none")]
729 pub subscribe_start_at: Option<String>,
730 #[serde(skip_serializing_if = "Option::is_none")]
731 pub subscribe_end_at: Option<String>,
732 #[serde(skip_serializing_if = "Option::is_none")]
733 pub settlement_time: Option<String>,
734 #[serde(skip_serializing_if = "Option::is_none")]
735 pub min_purchase_amount: Option<String>,
736 #[serde(skip_serializing_if = "Option::is_none")]
737 pub order_precision_digital: Option<i32>,
738 #[serde(skip_serializing_if = "Option::is_none")]
739 pub is_rfq_product: Option<bool>,
740 #[serde(skip_serializing_if = "Option::is_none")]
741 pub lower_price_buffer: Option<String>,
742 #[serde(skip_serializing_if = "Option::is_none")]
743 pub upper_price_buffer: Option<String>,
744 #[serde(skip_serializing_if = "Option::is_none")]
745 pub min_deviation_ratio: Option<String>,
746 #[serde(skip_serializing_if = "Option::is_none")]
747 pub max_deviation_ratio: Option<String>,
748 #[serde(skip_serializing_if = "Option::is_none")]
749 pub price_tick_size: Option<String>,
750}
751
752pub type GetDoubleWinProductResponse = GetDoubleWinProductResult;
753
754#[derive(Debug, Clone, Serialize, Deserialize)]
755#[serde(rename_all = "camelCase")]
756pub struct GetDoubleWinProductResult {
757 #[serde(skip_serializing_if = "Option::is_none")]
758 pub category: Option<String>,
759 #[serde(skip_serializing_if = "Option::is_none")]
760 pub list: Option<Vec<DoubleWinProduct>>,
761}
762
763#[derive(Debug, Clone, Serialize, Deserialize)]
764#[serde(rename_all = "camelCase")]
765pub struct DoubleWinProductExtraInfo {
766 #[serde(skip_serializing_if = "Option::is_none")]
767 pub category: Option<String>,
768 #[serde(skip_serializing_if = "Option::is_none")]
769 pub product_id: Option<String>,
770 #[serde(skip_serializing_if = "Option::is_none")]
771 pub leverage: Option<String>,
772 #[serde(skip_serializing_if = "Option::is_none")]
773 pub current_price: Option<String>,
774 #[serde(skip_serializing_if = "Option::is_none")]
775 pub expire_time: Option<String>,
776 #[serde(skip_serializing_if = "Option::is_none")]
777 pub max_investment_amount: Option<String>,
778}
779
780pub type GetDoubleWinProductExtraInfoResponse = DoubleWinProductExtraInfo;
781
782#[derive(Debug, Clone, Serialize, Deserialize)]
783#[serde(rename_all = "camelCase")]
784pub struct DoubleWinStakeExtra {
785 pub leverage: String,
786 pub initial_price: String,
787 #[serde(skip_serializing_if = "Option::is_none")]
788 pub lower_price: Option<String>,
789 #[serde(skip_serializing_if = "Option::is_none")]
790 pub upper_price: Option<String>,
791}
792
793#[derive(Debug, Clone, Serialize, Deserialize)]
794#[serde(rename_all = "camelCase")]
795pub struct DoubleWinRedeemExtra {
796 pub position_id: String,
797 pub est_redeem_amount: String,
798 #[serde(skip_serializing_if = "Option::is_none")]
799 pub is_slippage_protected: Option<bool>,
800}
801
802#[derive(Debug, Clone, Serialize, Deserialize)]
803#[serde(rename_all = "camelCase")]
804pub struct DoubleWinPosition {
805 #[serde(skip_serializing_if = "Option::is_none")]
806 pub position_id: Option<String>,
807 #[serde(skip_serializing_if = "Option::is_none")]
808 pub product_id: Option<String>,
809 #[serde(skip_serializing_if = "Option::is_none")]
810 pub category: Option<String>,
811 #[serde(skip_serializing_if = "Option::is_none")]
812 pub invest_coin: Option<String>,
813 #[serde(skip_serializing_if = "Option::is_none")]
814 pub underlying_asset: Option<String>,
815 #[serde(skip_serializing_if = "Option::is_none")]
816 pub amount: Option<String>,
817 #[serde(skip_serializing_if = "Option::is_none")]
818 pub leverage: Option<String>,
819 #[serde(skip_serializing_if = "Option::is_none")]
820 pub initial_price: Option<String>,
821 #[serde(skip_serializing_if = "Option::is_none")]
822 pub lower_price: Option<String>,
823 #[serde(skip_serializing_if = "Option::is_none")]
824 pub upper_price: Option<String>,
825 #[serde(skip_serializing_if = "Option::is_none")]
826 pub duration: Option<String>,
827 #[serde(skip_serializing_if = "Option::is_none")]
828 pub settlement_time: Option<String>,
829 #[serde(skip_serializing_if = "Option::is_none")]
830 pub created_time: Option<String>,
831 #[serde(skip_serializing_if = "Option::is_none")]
832 pub status: Option<String>,
833 #[serde(skip_serializing_if = "Option::is_none")]
834 pub redeemable: Option<bool>,
835 #[serde(skip_serializing_if = "Option::is_none")]
836 pub account_type: Option<String>,
837 #[serde(skip_serializing_if = "Option::is_none")]
838 pub order_id: Option<String>,
839}
840
841pub type GetDoubleWinPositionResponse = GetDoubleWinPositionResult;
842
843#[derive(Debug, Clone, Serialize, Deserialize)]
844#[serde(rename_all = "camelCase")]
845pub struct GetDoubleWinPositionResult {
846 #[serde(skip_serializing_if = "Option::is_none")]
847 pub next_page_cursor: Option<String>,
848 #[serde(skip_serializing_if = "Option::is_none")]
849 pub category: Option<String>,
850 #[serde(skip_serializing_if = "Option::is_none")]
851 pub list: Option<Vec<DoubleWinPosition>>,
852}
853
854#[derive(Debug, Clone, Serialize, Deserialize)]
855#[serde(rename_all = "camelCase")]
856pub struct DoubleWinOrder {
857 #[serde(skip_serializing_if = "Option::is_none")]
858 pub order_id: Option<String>,
859 #[serde(skip_serializing_if = "Option::is_none")]
860 pub order_link_id: Option<String>,
861 #[serde(skip_serializing_if = "Option::is_none")]
862 pub product_id: Option<String>,
863 #[serde(skip_serializing_if = "Option::is_none")]
864 pub category: Option<String>,
865 #[serde(skip_serializing_if = "Option::is_none")]
866 pub order_type: Option<String>,
867 #[serde(skip_serializing_if = "Option::is_none")]
868 pub invest_coin: Option<String>,
869 #[serde(skip_serializing_if = "Option::is_none")]
870 pub amount: Option<String>,
871 #[serde(skip_serializing_if = "Option::is_none")]
872 pub underlying_asset: Option<String>,
873 #[serde(skip_serializing_if = "Option::is_none")]
874 pub initial_price: Option<String>,
875 #[serde(skip_serializing_if = "Option::is_none")]
876 pub lower_price: Option<String>,
877 #[serde(skip_serializing_if = "Option::is_none")]
878 pub upper_price: Option<String>,
879 #[serde(skip_serializing_if = "Option::is_none")]
880 pub leverage: Option<String>,
881 #[serde(skip_serializing_if = "Option::is_none")]
882 pub settlement_time: Option<String>,
883 #[serde(skip_serializing_if = "Option::is_none")]
884 pub duration: Option<String>,
885 #[serde(skip_serializing_if = "Option::is_none")]
886 pub created_time: Option<String>,
887 #[serde(skip_serializing_if = "Option::is_none")]
888 pub updated_time: Option<String>,
889 #[serde(skip_serializing_if = "Option::is_none")]
890 pub status: Option<String>,
891 #[serde(skip_serializing_if = "Option::is_none")]
892 pub settlement_price: Option<String>,
893 #[serde(skip_serializing_if = "Option::is_none")]
894 pub pnl: Option<String>,
895 #[serde(skip_serializing_if = "Option::is_none")]
896 pub refund_status: Option<String>,
897 #[serde(skip_serializing_if = "Option::is_none")]
898 pub account_type: Option<String>,
899 #[serde(skip_serializing_if = "Option::is_none")]
900 pub to_account_type: Option<String>,
901}
902
903pub type GetDoubleWinOrderResponse = GetDoubleWinOrderResult;
904
905#[derive(Debug, Clone, Serialize, Deserialize)]
906#[serde(rename_all = "camelCase")]
907pub struct GetDoubleWinOrderResult {
908 #[serde(skip_serializing_if = "Option::is_none")]
909 pub next_page_cursor: Option<String>,
910 #[serde(skip_serializing_if = "Option::is_none")]
911 pub category: Option<String>,
912 #[serde(skip_serializing_if = "Option::is_none")]
913 pub list: Option<Vec<DoubleWinOrder>>,
914}
915
916#[derive(Debug, Clone, Serialize, Deserialize)]
917#[serde(rename_all = "camelCase")]
918pub struct AdvDiscountBuyProduct {
919 #[serde(skip_serializing_if = "Option::is_none")]
920 pub category: Option<String>,
921 #[serde(skip_serializing_if = "Option::is_none")]
922 pub product_id: Option<i64>,
923 #[serde(skip_serializing_if = "Option::is_none")]
924 pub coin: Option<String>,
925 #[serde(skip_serializing_if = "Option::is_none")]
926 pub underlying_asset: Option<String>,
927 #[serde(skip_serializing_if = "Option::is_none")]
928 pub settlement_time: Option<i64>,
929 #[serde(skip_serializing_if = "Option::is_none")]
930 pub duration: Option<String>,
931 #[serde(skip_serializing_if = "Option::is_none")]
932 pub is_vip_product: Option<bool>,
933 #[serde(skip_serializing_if = "Option::is_none")]
934 pub subscribe_start_at: Option<i64>,
935 #[serde(skip_serializing_if = "Option::is_none")]
936 pub subscribe_end_at: Option<i64>,
937 #[serde(skip_serializing_if = "Option::is_none")]
938 pub min_purchase_amount: Option<String>,
939 #[serde(skip_serializing_if = "Option::is_none")]
940 pub remaining_amount: Option<String>,
941 #[serde(skip_serializing_if = "Option::is_none")]
942 pub order_precision_digital: Option<i32>,
943 #[serde(skip_serializing_if = "Option::is_none")]
944 pub expect_receive_at: Option<i64>,
945}
946
947pub type GetDiscountBuyProductResponse = GetDiscountBuyProductResult;
948
949#[derive(Debug, Clone, Serialize, Deserialize)]
950#[serde(rename_all = "camelCase")]
951pub struct GetDiscountBuyProductResult {
952 #[serde(skip_serializing_if = "Option::is_none")]
953 pub category: Option<String>,
954 #[serde(skip_serializing_if = "Option::is_none")]
955 pub list: Option<Vec<AdvDiscountBuyProduct>>,
956}
957
958#[derive(Debug, Clone, Serialize, Deserialize)]
959#[serde(rename_all = "camelCase")]
960pub struct DiscountBuyPriceOfferItem {
961 #[serde(skip_serializing_if = "Option::is_none")]
962 pub category: Option<String>,
963 #[serde(skip_serializing_if = "Option::is_none")]
964 pub product_id: Option<i64>,
965 #[serde(skip_serializing_if = "Option::is_none")]
966 pub current_price: Option<String>,
967 #[serde(skip_serializing_if = "Option::is_none")]
968 pub purchase_price: Option<String>,
969 #[serde(skip_serializing_if = "Option::is_none")]
970 pub knockout_price: Option<String>,
971 #[serde(skip_serializing_if = "Option::is_none")]
972 pub knockout_coupon_e8: Option<i64>,
973 #[serde(skip_serializing_if = "Option::is_none")]
974 pub max_investment_amount: Option<String>,
975 #[serde(skip_serializing_if = "Option::is_none")]
976 pub inst_uid: Option<i64>,
977 #[serde(skip_serializing_if = "Option::is_none")]
978 pub expired_at: Option<i64>,
979}
980
981#[derive(Debug, Clone, Serialize, Deserialize)]
982#[serde(rename_all = "camelCase")]
983pub struct DiscountBuyProductExtraInfo {
984 #[serde(skip_serializing_if = "Option::is_none")]
985 pub offers: Option<Vec<DiscountBuyPriceOfferItem>>,
986}
987
988pub type GetDiscountBuyProductExtraInfoResponse = DiscountBuyProductExtraInfo;
989
990#[derive(Debug, Clone, Serialize, Deserialize)]
991#[serde(rename_all = "camelCase")]
992pub struct DiscountBuyExtra {
993 pub initial_price: String,
994 pub purchase_price: String,
995 pub knockout_price: String,
996 pub knockout_coupon_e8: i64,
997 pub inst_uid: i64,
998 pub settle_type: String,
999}
1000
1001#[derive(Debug, Clone, Serialize, Deserialize)]
1002#[serde(rename_all = "camelCase")]
1003pub struct AdvDiscountBuyPosition {
1004 #[serde(skip_serializing_if = "Option::is_none")]
1005 pub position_id: Option<String>,
1006 #[serde(skip_serializing_if = "Option::is_none")]
1007 pub product_id: Option<i64>,
1008 #[serde(skip_serializing_if = "Option::is_none")]
1009 pub category: Option<String>,
1010 #[serde(skip_serializing_if = "Option::is_none")]
1011 pub coin: Option<String>,
1012 #[serde(skip_serializing_if = "Option::is_none")]
1013 pub underlying_asset: Option<String>,
1014 #[serde(skip_serializing_if = "Option::is_none")]
1015 pub amount: Option<String>,
1016 #[serde(skip_serializing_if = "Option::is_none")]
1017 pub purchase_price: Option<String>,
1018 #[serde(skip_serializing_if = "Option::is_none")]
1019 pub knockout_price: Option<String>,
1020 #[serde(skip_serializing_if = "Option::is_none")]
1021 pub knockout_coupon_e8: Option<i64>,
1022 #[serde(skip_serializing_if = "Option::is_none")]
1023 pub status: Option<String>,
1024 #[serde(skip_serializing_if = "Option::is_none")]
1025 pub order_id: Option<String>,
1026 #[serde(skip_serializing_if = "Option::is_none")]
1027 pub duration: Option<String>,
1028 #[serde(skip_serializing_if = "Option::is_none")]
1029 pub settlement_time: Option<i64>,
1030 #[serde(skip_serializing_if = "Option::is_none")]
1031 pub account_type: Option<String>,
1032 #[serde(skip_serializing_if = "Option::is_none")]
1033 pub to_account_type: Option<String>,
1034 #[serde(skip_serializing_if = "Option::is_none")]
1035 pub settle_type: Option<String>,
1036 #[serde(skip_serializing_if = "Option::is_none")]
1037 pub expect_receive_at: Option<i64>,
1038}
1039
1040pub type GetDiscountBuyPositionResponse = GetDiscountBuyPositionResult;
1041
1042#[derive(Debug, Clone, Serialize, Deserialize)]
1043#[serde(rename_all = "camelCase")]
1044pub struct GetDiscountBuyPositionResult {
1045 #[serde(skip_serializing_if = "Option::is_none")]
1046 pub next_page_cursor: Option<String>,
1047 #[serde(skip_serializing_if = "Option::is_none")]
1048 pub category: Option<String>,
1049 #[serde(skip_serializing_if = "Option::is_none")]
1050 pub list: Option<Vec<AdvDiscountBuyPosition>>,
1051}
1052
1053#[derive(Debug, Clone, Serialize, Deserialize)]
1054#[serde(rename_all = "camelCase")]
1055pub struct AdvDiscountBuyOrder {
1056 #[serde(skip_serializing_if = "Option::is_none")]
1057 pub order_id: Option<String>,
1058 #[serde(skip_serializing_if = "Option::is_none")]
1059 pub order_link_id: Option<String>,
1060 #[serde(skip_serializing_if = "Option::is_none")]
1061 pub product_id: Option<i64>,
1062 #[serde(skip_serializing_if = "Option::is_none")]
1063 pub category: Option<String>,
1064 #[serde(skip_serializing_if = "Option::is_none")]
1065 pub order_type: Option<String>,
1066 #[serde(skip_serializing_if = "Option::is_none")]
1067 pub amount: Option<String>,
1068 #[serde(skip_serializing_if = "Option::is_none")]
1069 pub coin: Option<String>,
1070 #[serde(skip_serializing_if = "Option::is_none")]
1071 pub underlying_asset: Option<String>,
1072 #[serde(skip_serializing_if = "Option::is_none")]
1073 pub status: Option<String>,
1074 #[serde(skip_serializing_if = "Option::is_none")]
1075 pub created_time: Option<String>,
1076 #[serde(skip_serializing_if = "Option::is_none")]
1077 pub purchase_price: Option<String>,
1078 #[serde(skip_serializing_if = "Option::is_none")]
1079 pub knockout_price: Option<String>,
1080 #[serde(skip_serializing_if = "Option::is_none")]
1081 pub knockout_coupon_e8: Option<i64>,
1082 #[serde(skip_serializing_if = "Option::is_none")]
1083 pub duration: Option<String>,
1084 #[serde(skip_serializing_if = "Option::is_none")]
1085 pub settlement_time: Option<i64>,
1086 #[serde(skip_serializing_if = "Option::is_none")]
1087 pub account_type: Option<String>,
1088 #[serde(skip_serializing_if = "Option::is_none")]
1089 pub to_account_type: Option<String>,
1090 #[serde(skip_serializing_if = "Option::is_none")]
1091 pub settlement_price: Option<String>,
1092 #[serde(skip_serializing_if = "Option::is_none")]
1093 pub settlement_coin: Option<String>,
1094 #[serde(skip_serializing_if = "Option::is_none")]
1095 pub settlement_amount: Option<String>,
1096 #[serde(skip_serializing_if = "Option::is_none")]
1097 pub settle_type: Option<String>,
1098 #[serde(skip_serializing_if = "Option::is_none")]
1099 pub is_vip: Option<bool>,
1100 #[serde(skip_serializing_if = "Option::is_none")]
1101 pub refund_status: Option<String>,
1102}
1103
1104pub type GetDiscountBuyOrderResponse = GetDiscountBuyOrderResult;
1105
1106#[derive(Debug, Clone, Serialize, Deserialize)]
1107#[serde(rename_all = "camelCase")]
1108pub struct GetDiscountBuyOrderResult {
1109 #[serde(skip_serializing_if = "Option::is_none")]
1110 pub next_page_cursor: Option<String>,
1111 #[serde(skip_serializing_if = "Option::is_none")]
1112 pub category: Option<String>,
1113 #[serde(skip_serializing_if = "Option::is_none")]
1114 pub list: Option<Vec<AdvDiscountBuyOrder>>,
1115}
1116
1117#[derive(Debug, Clone, Serialize, Deserialize)]
1118#[serde(rename_all = "camelCase")]
1119pub struct PlaceFixedTermOrderParams {
1120 pub product_id: String,
1121 pub category: String,
1122 pub coin: String,
1123 pub amount: String,
1124 pub account_type: String,
1125 pub order_link_id: String,
1126 #[serde(skip_serializing_if = "Option::is_none")]
1127 pub auto_invest: Option<bool>,
1128}
1129
1130pub type PlaceFixedTermOrderResponse = PlaceFixedTermOrderResult;
1131
1132#[derive(Debug, Clone, Serialize, Deserialize)]
1133#[serde(rename_all = "camelCase")]
1134pub struct PlaceFixedTermOrderResult {
1135 #[serde(skip_serializing_if = "Option::is_none")]
1136 pub order_id: Option<String>,
1137 #[serde(skip_serializing_if = "Option::is_none")]
1138 pub order_link_id: Option<String>,
1139}
1140
1141#[derive(Debug, Clone, Serialize, Deserialize)]
1142#[serde(rename_all = "camelCase")]
1143pub struct RedeemFixedTermParams {
1144 pub product_id: String,
1145 pub category: String,
1146 pub position_id: String,
1147}
1148
1149pub type RedeemFixedTermResponse = RedeemFixedTermResult;
1150
1151#[derive(Debug, Clone, Serialize, Deserialize)]
1152#[serde(rename_all = "camelCase")]
1153pub struct RedeemFixedTermResult {
1154 #[serde(skip_serializing_if = "Option::is_none")]
1155 pub position_id: Option<String>,
1156 #[serde(skip_serializing_if = "Option::is_none")]
1157 pub est_redeem_amount: Option<String>,
1158 #[serde(skip_serializing_if = "Option::is_none")]
1159 pub est_redeem_time: Option<String>,
1160}
1161
1162pub type GetFixedTermPositionResponse = GetFixedTermPositionResult;
1163
1164#[derive(Debug, Clone, Serialize, Deserialize)]
1165#[serde(rename_all = "camelCase")]
1166pub struct GetFixedTermPositionResult {
1167 #[serde(skip_serializing_if = "Option::is_none")]
1168 pub list: Option<Vec<FixedTermPosition>>,
1169}
1170
1171#[derive(Debug, Clone, Serialize, Deserialize)]
1172#[serde(rename_all = "camelCase")]
1173pub struct FixedTermPosition {
1174 #[serde(skip_serializing_if = "Option::is_none")]
1175 pub position_id: Option<String>,
1176 #[serde(skip_serializing_if = "Option::is_none")]
1177 pub product_id: Option<String>,
1178 #[serde(skip_serializing_if = "Option::is_none")]
1179 pub category: Option<String>,
1180 #[serde(skip_serializing_if = "Option::is_none")]
1181 pub coin: Option<String>,
1182 #[serde(skip_serializing_if = "Option::is_none")]
1183 pub amount: Option<String>,
1184 #[serde(skip_serializing_if = "Option::is_none")]
1185 pub duration: Option<String>,
1186 #[serde(skip_serializing_if = "Option::is_none")]
1187 pub apy: Option<String>,
1188 #[serde(skip_serializing_if = "Option::is_none")]
1189 pub status: Option<String>,
1190 #[serde(skip_serializing_if = "Option::is_none")]
1191 pub settlement_time: Option<String>,
1192 #[serde(skip_serializing_if = "Option::is_none")]
1193 pub created_time: Option<String>,
1194 #[serde(skip_serializing_if = "Option::is_none")]
1195 pub auto_invest: Option<bool>,
1196}
1197
1198pub type GetFixedTermOrderResponse = GetFixedTermOrderResult;
1199
1200#[derive(Debug, Clone, Serialize, Deserialize)]
1201#[serde(rename_all = "camelCase")]
1202pub struct GetFixedTermOrderResult {
1203 #[serde(skip_serializing_if = "Option::is_none")]
1204 pub next_page_cursor: Option<String>,
1205 #[serde(skip_serializing_if = "Option::is_none")]
1206 pub list: Option<Vec<FixedTermOrder>>,
1207}
1208
1209#[derive(Debug, Clone, Serialize, Deserialize)]
1210#[serde(rename_all = "camelCase")]
1211pub struct FixedTermOrder {
1212 #[serde(skip_serializing_if = "Option::is_none")]
1213 pub order_id: Option<String>,
1214 #[serde(skip_serializing_if = "Option::is_none")]
1215 pub order_link_id: Option<String>,
1216 #[serde(skip_serializing_if = "Option::is_none")]
1217 pub product_id: Option<String>,
1218 #[serde(skip_serializing_if = "Option::is_none")]
1219 pub category: Option<String>,
1220 #[serde(skip_serializing_if = "Option::is_none")]
1221 pub coin: Option<String>,
1222 #[serde(skip_serializing_if = "Option::is_none")]
1223 pub amount: Option<String>,
1224 #[serde(skip_serializing_if = "Option::is_none")]
1225 pub order_type: Option<String>,
1226 #[serde(skip_serializing_if = "Option::is_none")]
1227 pub status: Option<String>,
1228 #[serde(skip_serializing_if = "Option::is_none")]
1229 pub created_time: Option<String>,
1230 #[serde(skip_serializing_if = "Option::is_none")]
1231 pub updated_time: Option<String>,
1232}
1233
1234#[derive(Debug, Clone, Serialize, Deserialize)]
1235#[serde(rename_all = "camelCase")]
1236pub struct SetFixedTermAutoInvestParams {
1237 pub product_id: String,
1238 pub category: String,
1239 pub position_id: String,
1240 pub status: String,
1241}
1242
1243pub type RwaProductListResponse = RwaProductListResult;
1244
1245#[derive(Debug, Clone, Serialize, Deserialize)]
1246#[serde(rename_all = "camelCase")]
1247pub struct RwaProductListResult {
1248 #[serde(skip_serializing_if = "Option::is_none")]
1249 pub list: Option<Vec<RwaProduct>>,
1250}
1251
1252#[derive(Debug, Clone, Serialize, Deserialize)]
1253#[serde(rename_all = "camelCase")]
1254pub struct RwaProduct {
1255 #[serde(skip_serializing_if = "Option::is_none")]
1256 pub product_id: Option<i64>,
1257 #[serde(skip_serializing_if = "Option::is_none")]
1258 pub coin: Option<String>,
1259 #[serde(skip_serializing_if = "Option::is_none")]
1260 pub name: Option<String>,
1261 #[serde(skip_serializing_if = "Option::is_none")]
1262 pub apy: Option<String>,
1263 #[serde(skip_serializing_if = "Option::is_none")]
1264 pub min_stake_amount: Option<String>,
1265 #[serde(skip_serializing_if = "Option::is_none")]
1266 pub status: Option<String>,
1267}
1268
1269#[derive(Debug, Clone, Serialize, Deserialize)]
1270#[serde(rename_all = "camelCase")]
1271pub struct PlaceRwaOrderParams {
1272 pub product_id: i64,
1273 pub order_type: String,
1274 pub coin: String,
1275 #[serde(skip_serializing_if = "Option::is_none")]
1276 pub stake_amount: Option<String>,
1277 #[serde(skip_serializing_if = "Option::is_none")]
1278 pub redeem_shares: Option<String>,
1279 #[serde(skip_serializing_if = "Option::is_none")]
1280 pub account_type: Option<String>,
1281 pub order_link_id: String,
1282}
1283
1284pub type PlaceRwaOrderResponse = PlaceRwaOrderResult;
1285
1286#[derive(Debug, Clone, Serialize, Deserialize)]
1287#[serde(rename_all = "camelCase")]
1288pub struct PlaceRwaOrderResult {
1289 #[serde(skip_serializing_if = "Option::is_none")]
1290 pub order_id: Option<String>,
1291 #[serde(skip_serializing_if = "Option::is_none")]
1292 pub order_link_id: Option<String>,
1293}
1294
1295pub type RwaPositionListResponse = RwaPositionListResult;
1296
1297#[derive(Debug, Clone, Serialize, Deserialize)]
1298#[serde(rename_all = "camelCase")]
1299pub struct RwaPositionListResult {
1300 #[serde(skip_serializing_if = "Option::is_none")]
1301 pub list: Option<Vec<RwaPosition>>,
1302}
1303
1304#[derive(Debug, Clone, Serialize, Deserialize)]
1305#[serde(rename_all = "camelCase")]
1306pub struct RwaPosition {
1307 #[serde(skip_serializing_if = "Option::is_none")]
1308 pub product_id: Option<i64>,
1309 #[serde(skip_serializing_if = "Option::is_none")]
1310 pub coin: Option<String>,
1311 #[serde(skip_serializing_if = "Option::is_none")]
1312 pub shares: Option<String>,
1313 #[serde(skip_serializing_if = "Option::is_none")]
1314 pub stake_amount: Option<String>,
1315 #[serde(skip_serializing_if = "Option::is_none")]
1316 pub nav: Option<String>,
1317 #[serde(skip_serializing_if = "Option::is_none")]
1318 pub status: Option<String>,
1319}
1320
1321pub type RwaOrderListResponse = RwaOrderListResult;
1322
1323#[derive(Debug, Clone, Serialize, Deserialize)]
1324#[serde(rename_all = "camelCase")]
1325pub struct RwaOrderListResult {
1326 #[serde(skip_serializing_if = "Option::is_none")]
1327 pub next_page_cursor: Option<String>,
1328 #[serde(skip_serializing_if = "Option::is_none")]
1329 pub list: Option<Vec<RwaOrder>>,
1330}
1331
1332#[derive(Debug, Clone, Serialize, Deserialize)]
1333#[serde(rename_all = "camelCase")]
1334pub struct RwaOrder {
1335 #[serde(skip_serializing_if = "Option::is_none")]
1336 pub order_id: Option<String>,
1337 #[serde(skip_serializing_if = "Option::is_none")]
1338 pub order_link_id: Option<String>,
1339 #[serde(skip_serializing_if = "Option::is_none")]
1340 pub product_id: Option<i64>,
1341 #[serde(skip_serializing_if = "Option::is_none")]
1342 pub order_type: Option<String>,
1343 #[serde(skip_serializing_if = "Option::is_none")]
1344 pub coin: Option<String>,
1345 #[serde(skip_serializing_if = "Option::is_none")]
1346 pub stake_amount: Option<String>,
1347 #[serde(skip_serializing_if = "Option::is_none")]
1348 pub redeem_shares: Option<String>,
1349 #[serde(skip_serializing_if = "Option::is_none")]
1350 pub status: Option<String>,
1351 #[serde(skip_serializing_if = "Option::is_none")]
1352 pub created_time: Option<String>,
1353 #[serde(skip_serializing_if = "Option::is_none")]
1354 pub updated_time: Option<String>,
1355}
1356
1357pub type RwaNavChartResponse = RwaNavChartResult;
1358
1359#[derive(Debug, Clone, Serialize, Deserialize)]
1360#[serde(rename_all = "camelCase")]
1361pub struct RwaNavChartResult {
1362 #[serde(skip_serializing_if = "Option::is_none")]
1363 pub list: Option<Vec<RwaNavPoint>>,
1364}
1365
1366#[derive(Debug, Clone, Serialize, Deserialize)]
1367#[serde(rename_all = "camelCase")]
1368pub struct RwaNavPoint {
1369 #[serde(skip_serializing_if = "Option::is_none")]
1370 pub time: Option<i64>,
1371 #[serde(skip_serializing_if = "Option::is_none")]
1372 pub nav: Option<String>,
1373}
1374
1375pub type GetProductResponse = GetProductResult;
1376
1377#[derive(Debug, Clone, Serialize, Deserialize)]
1378#[serde(rename_all = "camelCase")]
1379pub struct GetProductResult {
1380 #[serde(skip_serializing_if = "Option::is_none")]
1381 pub category: Option<String>,
1382 #[serde(skip_serializing_if = "Option::is_none")]
1383 pub list: Option<Vec<EarnProduct>>,
1384}
1385
1386#[derive(Debug, Clone, Serialize, Deserialize)]
1387#[serde(rename_all = "camelCase")]
1388pub struct EarnProduct {
1389 #[serde(skip_serializing_if = "Option::is_none")]
1390 pub category: Option<String>,
1391 #[serde(skip_serializing_if = "Option::is_none")]
1392 pub estimate_apr: Option<String>,
1393 #[serde(skip_serializing_if = "Option::is_none")]
1394 pub coin: Option<String>,
1395 #[serde(skip_serializing_if = "Option::is_none")]
1396 pub min_stake_amount: Option<String>,
1397 #[serde(skip_serializing_if = "Option::is_none")]
1398 pub max_stake_amount: Option<String>,
1399 #[serde(skip_serializing_if = "Option::is_none")]
1400 pub precision: Option<String>,
1401 #[serde(skip_serializing_if = "Option::is_none")]
1402 pub product_id: Option<String>,
1403 #[serde(skip_serializing_if = "Option::is_none")]
1404 pub status: Option<String>,
1405}
1406
1407#[derive(Debug, Clone, Serialize, Deserialize)]
1408#[serde(rename_all = "camelCase")]
1409pub struct PlaceEarnOrderParams {
1410 pub category: String,
1411 pub order_type: String,
1412 pub account_type: String,
1413 pub amount: String,
1414 pub coin: String,
1415 pub product_id: String,
1416 pub order_link_id: String,
1417 #[serde(skip_serializing_if = "Option::is_none")]
1418 pub redeem_position_id: Option<String>,
1419 #[serde(skip_serializing_if = "Option::is_none")]
1420 pub to_account_type: Option<String>,
1421 #[serde(skip_serializing_if = "Option::is_none")]
1425 pub interest_card: Option<serde_json::Value>,
1426}
1427
1428pub type PlaceOrderResponse = PlaceOrderResult;
1429
1430#[derive(Debug, Clone, Serialize, Deserialize)]
1431#[serde(rename_all = "camelCase")]
1432pub struct PlaceOrderResult {
1433 #[serde(skip_serializing_if = "Option::is_none")]
1434 pub order_id: Option<String>,
1435 #[serde(skip_serializing_if = "Option::is_none")]
1436 pub order_link_id: Option<String>,
1437}
1438
1439pub type OrderHistoryResponse = OrderHistoryResult;
1440
1441#[derive(Debug, Clone, Serialize, Deserialize)]
1442#[serde(rename_all = "camelCase")]
1443pub struct OrderHistoryResult {
1444 #[serde(skip_serializing_if = "Option::is_none")]
1445 pub next_page_cursor: Option<String>,
1446 #[serde(skip_serializing_if = "Option::is_none")]
1447 pub list: Option<Vec<EarnOrderHistoryItem>>,
1448}
1449
1450#[derive(Debug, Clone, Serialize, Deserialize)]
1451#[serde(rename_all = "camelCase")]
1452pub struct EarnOrderHistoryItem {
1453 #[serde(skip_serializing_if = "Option::is_none")]
1454 pub order_id: Option<String>,
1455 #[serde(skip_serializing_if = "Option::is_none")]
1456 pub order_link_id: Option<String>,
1457 #[serde(skip_serializing_if = "Option::is_none")]
1458 pub category: Option<String>,
1459 #[serde(skip_serializing_if = "Option::is_none")]
1460 pub product_id: Option<String>,
1461 #[serde(skip_serializing_if = "Option::is_none")]
1462 pub coin: Option<String>,
1463 #[serde(skip_serializing_if = "Option::is_none")]
1464 pub amount: Option<String>,
1465 #[serde(skip_serializing_if = "Option::is_none")]
1466 pub order_type: Option<String>,
1467 #[serde(skip_serializing_if = "Option::is_none")]
1468 pub status: Option<String>,
1469 #[serde(skip_serializing_if = "Option::is_none")]
1470 pub created_time: Option<String>,
1471 #[serde(skip_serializing_if = "Option::is_none")]
1472 pub updated_time: Option<String>,
1473}
1474
1475pub type PositionResponse = PositionResult;
1476
1477#[derive(Debug, Clone, Serialize, Deserialize)]
1478#[serde(rename_all = "camelCase")]
1479pub struct PositionResult {
1480 #[serde(skip_serializing_if = "Option::is_none")]
1481 pub list: Option<Vec<EarnPositionItem>>,
1482}
1483
1484#[derive(Debug, Clone, Serialize, Deserialize)]
1485#[serde(rename_all = "camelCase")]
1486pub struct EarnPositionItem {
1487 #[serde(skip_serializing_if = "Option::is_none")]
1488 pub position_id: Option<String>,
1489 #[serde(skip_serializing_if = "Option::is_none")]
1490 pub product_id: Option<String>,
1491 #[serde(skip_serializing_if = "Option::is_none")]
1492 pub category: Option<String>,
1493 #[serde(skip_serializing_if = "Option::is_none")]
1494 pub coin: Option<String>,
1495 #[serde(skip_serializing_if = "Option::is_none")]
1496 pub amount: Option<String>,
1497 #[serde(skip_serializing_if = "Option::is_none")]
1498 pub apr: Option<String>,
1499 #[serde(skip_serializing_if = "Option::is_none")]
1500 pub status: Option<String>,
1501 #[serde(skip_serializing_if = "Option::is_none")]
1502 pub created_time: Option<String>,
1503 #[serde(skip_serializing_if = "Option::is_none")]
1504 pub updated_time: Option<String>,
1505}
1506
1507pub type YieldHistoryResponse = YieldHistoryResult;
1508
1509#[derive(Debug, Clone, Serialize, Deserialize)]
1510#[serde(rename_all = "camelCase")]
1511pub struct YieldHistoryResult {
1512 #[serde(skip_serializing_if = "Option::is_none")]
1513 pub next_page_cursor: Option<String>,
1514 #[serde(skip_serializing_if = "Option::is_none")]
1515 pub list: Option<Vec<YieldHistoryItem>>,
1516}
1517
1518#[derive(Debug, Clone, Serialize, Deserialize)]
1519#[serde(rename_all = "camelCase")]
1520pub struct YieldHistoryItem {
1521 #[serde(skip_serializing_if = "Option::is_none")]
1522 pub category: Option<String>,
1523 #[serde(skip_serializing_if = "Option::is_none")]
1524 pub product_id: Option<String>,
1525 #[serde(skip_serializing_if = "Option::is_none")]
1526 pub coin: Option<String>,
1527 #[serde(skip_serializing_if = "Option::is_none")]
1528 pub yield_amount: Option<String>,
1529 #[serde(skip_serializing_if = "Option::is_none")]
1530 pub yield_time: Option<String>,
1531}
1532
1533#[derive(Debug, Clone, Serialize, Deserialize)]
1534#[serde(rename_all = "camelCase")]
1535pub struct ModifyEarnPositionParams {
1536 pub category: String,
1537 pub product_id: i64,
1538 pub position_id: i64,
1539 pub auto_reinvest: i32,
1540}
1541
1542#[derive(Debug, Clone, Serialize, Deserialize)]
1543#[serde(rename_all = "camelCase")]
1544pub struct AddLiquidityParams {
1545 pub product_id: String,
1546 pub order_link_id: String,
1547 #[serde(skip_serializing_if = "Option::is_none")]
1548 pub quote_account_type: Option<String>,
1549 #[serde(skip_serializing_if = "Option::is_none")]
1550 pub base_account_type: Option<String>,
1551 #[serde(skip_serializing_if = "Option::is_none")]
1552 pub quote_amount: Option<String>,
1553 #[serde(skip_serializing_if = "Option::is_none")]
1554 pub base_amount: Option<String>,
1555 #[serde(skip_serializing_if = "Option::is_none")]
1556 pub leverage: Option<String>,
1557}
1558
1559#[derive(Debug, Clone, Serialize, Deserialize)]
1560#[serde(rename_all = "camelCase")]
1561pub struct RemoveLiquidityParams {
1562 pub product_id: String,
1563 pub order_link_id: String,
1564 pub position_id: String,
1565 #[serde(skip_serializing_if = "Option::is_none")]
1566 pub remove_rate: Option<i32>,
1567 #[serde(skip_serializing_if = "Option::is_none")]
1568 pub remove_type: Option<String>,
1569}
1570
1571#[derive(Debug, Clone, Serialize, Deserialize)]
1572#[serde(rename_all = "camelCase")]
1573pub struct ReinvestLiquidityParams {
1574 pub product_id: String,
1575 pub order_link_id: String,
1576 pub position_id: String,
1577}
1578
1579#[derive(Debug, Clone, Serialize, Deserialize)]
1580#[serde(rename_all = "camelCase")]
1581pub struct ClaimLiquidityInterestParams {
1582 pub product_id: String,
1583}
1584
1585pub type HourlyYieldResponse = HourlyYieldResult;
1586
1587#[derive(Debug, Clone, Serialize, Deserialize)]
1588#[serde(rename_all = "camelCase")]
1589pub struct HourlyYieldResult {
1590 #[serde(default)]
1591 pub list: Vec<HourlyYieldRecord>,
1592 #[serde(skip_serializing_if = "Option::is_none")]
1593 pub next_page_cursor: Option<String>,
1594}
1595
1596#[derive(Debug, Clone, Serialize, Deserialize)]
1597#[serde(rename_all = "camelCase")]
1598pub struct HourlyYieldRecord {
1599 #[serde(default)]
1600 pub effective_amount: String,
1601 #[serde(default, rename = "yield")]
1602 pub yield_: String,
1603 #[serde(default)]
1604 pub reward_type: i32,
1605 #[serde(default)]
1606 pub apr_e8: i64,
1607 #[serde(default)]
1608 pub hourly_date: i64,
1609 #[serde(default)]
1610 pub created_time: i64,
1611}
1612
1613pub type AprHistoryResponse = AprHistoryResult;
1614
1615#[derive(Debug, Clone, Serialize, Deserialize)]
1616#[serde(rename_all = "camelCase")]
1617pub struct AprHistoryResult {
1618 #[serde(default)]
1619 pub list: Vec<AprRecord>,
1620}
1621
1622#[derive(Debug, Clone, Serialize, Deserialize)]
1623#[serde(rename_all = "camelCase")]
1624pub struct AprRecord {
1625 #[serde(default)]
1626 pub timestamp: i64,
1627 #[serde(default)]
1628 pub apr_e8: i64,
1629}
1630
1631pub type ListCouponsResponse = ListCouponsResult;
1632
1633#[derive(Debug, Clone, Serialize, Deserialize)]
1634#[serde(rename_all = "camelCase")]
1635pub struct ListCouponsResult {
1636 #[serde(default)]
1637 pub list: Vec<EarnCoupon>,
1638}
1639
1640#[derive(Debug, Clone, Serialize, Deserialize)]
1641#[serde(rename_all = "camelCase")]
1642pub struct EarnCoupon {
1643 #[serde(default)]
1644 pub coupon_id: String,
1645 #[serde(default)]
1646 pub coupon_type: String,
1647 #[serde(default)]
1648 pub coin: String,
1649 #[serde(default)]
1650 pub amount: String,
1651 #[serde(default)]
1652 pub status: String,
1653 #[serde(default)]
1654 pub start_time: i64,
1655 #[serde(default)]
1656 pub end_time: i64,
1657}
1658
1659pub type GetHoldToEarnProductResponse = GetHoldToEarnProductResult;
1660
1661#[derive(Debug, Clone, Serialize, Deserialize)]
1662#[serde(rename_all = "camelCase")]
1663pub struct GetHoldToEarnProductResult {
1664 #[serde(default)]
1665 pub list: Vec<HoldToEarnProduct>,
1666}
1667
1668#[derive(Debug, Clone, Serialize, Deserialize)]
1669#[serde(rename_all = "camelCase")]
1670pub struct HoldToEarnProduct {
1671 #[serde(default)]
1672 pub product_id: String,
1673 #[serde(default)]
1674 pub coin: String,
1675 #[serde(default)]
1676 pub status: String,
1677 #[serde(default)]
1678 pub min_stake_amount: String,
1679 #[serde(default)]
1680 pub max_stake_amount: String,
1681 #[serde(default)]
1682 pub precision: i32,
1683 #[serde(default)]
1684 pub apy: String,
1685}
1686
1687pub type GetHoldToEarnYieldHistoryResponse = GetHoldToEarnYieldHistoryResult;
1688
1689#[derive(Debug, Clone, Serialize, Deserialize)]
1690#[serde(rename_all = "camelCase")]
1691pub struct GetHoldToEarnYieldHistoryResult {
1692 #[serde(default)]
1693 pub list: Vec<HoldToEarnYieldRecord>,
1694 #[serde(skip_serializing_if = "Option::is_none")]
1695 pub next_page_cursor: Option<String>,
1696}
1697
1698#[derive(Debug, Clone, Serialize, Deserialize)]
1699#[serde(rename_all = "camelCase")]
1700pub struct HoldToEarnYieldRecord {
1701 #[serde(default)]
1702 pub coin: String,
1703 #[serde(default)]
1704 pub amount: String,
1705 #[serde(default, rename = "yield")]
1706 pub yield_: String,
1707 #[serde(default)]
1708 pub status: String,
1709 #[serde(default)]
1710 pub created_time: i64,
1711}
1712
1713pub type GetLMProductsResponse = GetLMProductsResult;
1714
1715#[derive(Debug, Clone, Serialize, Deserialize)]
1716#[serde(rename_all = "camelCase")]
1717pub struct GetLMProductsResult {
1718 #[serde(default)]
1719 pub list: Vec<LMProduct>,
1720}
1721
1722#[derive(Debug, Clone, Serialize, Deserialize)]
1723#[serde(rename_all = "camelCase")]
1724pub struct LMProduct {
1725 #[serde(default)]
1726 pub product_id: String,
1727 #[serde(default)]
1728 pub base_coin: String,
1729 #[serde(default)]
1730 pub quote_coin: String,
1731 #[serde(default)]
1732 pub status: String,
1733 #[serde(default)]
1734 pub min_leverage: String,
1735 #[serde(default)]
1736 pub max_leverage: String,
1737 #[serde(default)]
1738 pub min_quote_amount: String,
1739 #[serde(default)]
1740 pub max_quote_amount: String,
1741 #[serde(default)]
1742 pub min_base_amount: String,
1743 #[serde(default)]
1744 pub max_base_amount: String,
1745 #[serde(default)]
1746 pub apy: String,
1747 #[serde(default)]
1748 pub precision: i32,
1749}
1750
1751pub type LMOrderResponse = LMOrderResult;
1752
1753#[derive(Debug, Clone, Serialize, Deserialize)]
1754#[serde(rename_all = "camelCase")]
1755pub struct LMOrderResult {
1756 #[serde(skip_serializing_if = "Option::is_none")]
1757 pub order_id: Option<String>,
1758 #[serde(skip_serializing_if = "Option::is_none")]
1759 pub order_link_id: Option<String>,
1760}
1761
1762pub type GetLMPositionsResponse = GetLMPositionsResult;
1763
1764#[derive(Debug, Clone, Serialize, Deserialize)]
1765#[serde(rename_all = "camelCase")]
1766pub struct GetLMPositionsResult {
1767 #[serde(default)]
1768 pub list: Vec<LMPosition>,
1769}
1770
1771#[derive(Debug, Clone, Serialize, Deserialize)]
1772#[serde(rename_all = "camelCase")]
1773pub struct LMPosition {
1774 #[serde(default)]
1775 pub position_id: String,
1776 #[serde(default)]
1777 pub product_id: String,
1778 #[serde(default)]
1779 pub base_coin: String,
1780 #[serde(default)]
1781 pub quote_coin: String,
1782 #[serde(default)]
1783 pub base_amount: String,
1784 #[serde(default)]
1785 pub quote_amount: String,
1786 #[serde(default)]
1787 pub leverage: String,
1788 #[serde(default)]
1789 pub margin: String,
1790 #[serde(default)]
1791 pub status: String,
1792 #[serde(default)]
1793 pub created_time: i64,
1794}
1795
1796pub type GetLMOrdersResponse = GetLMOrdersResult;
1797
1798#[derive(Debug, Clone, Serialize, Deserialize)]
1799#[serde(rename_all = "camelCase")]
1800pub struct GetLMOrdersResult {
1801 #[serde(default)]
1802 pub list: Vec<LMOrder>,
1803 #[serde(skip_serializing_if = "Option::is_none")]
1804 pub next_page_cursor: Option<String>,
1805}
1806
1807#[derive(Debug, Clone, Serialize, Deserialize)]
1808#[serde(rename_all = "camelCase")]
1809pub struct LMOrder {
1810 #[serde(default)]
1811 pub order_id: String,
1812 #[serde(default)]
1813 pub order_link_id: String,
1814 #[serde(default)]
1815 pub product_id: String,
1816 #[serde(default)]
1817 pub position_id: String,
1818 #[serde(default)]
1819 pub order_type: String,
1820 #[serde(default)]
1821 pub status: String,
1822 #[serde(default)]
1823 pub base_coin: String,
1824 #[serde(default)]
1825 pub quote_coin: String,
1826 #[serde(default)]
1827 pub base_amount: String,
1828 #[serde(default)]
1829 pub quote_amount: String,
1830 #[serde(default)]
1831 pub leverage: String,
1832 #[serde(default)]
1833 pub created_time: i64,
1834 #[serde(default)]
1835 pub updated_time: i64,
1836}
1837
1838pub type GetLMYieldRecordsResponse = GetLMYieldRecordsResult;
1839
1840#[derive(Debug, Clone, Serialize, Deserialize)]
1841#[serde(rename_all = "camelCase")]
1842pub struct GetLMYieldRecordsResult {
1843 #[serde(default)]
1844 pub list: Vec<LMYieldRecord>,
1845 #[serde(skip_serializing_if = "Option::is_none")]
1846 pub next_page_cursor: Option<String>,
1847}
1848
1849#[derive(Debug, Clone, Serialize, Deserialize)]
1850#[serde(rename_all = "camelCase")]
1851pub struct LMYieldRecord {
1852 #[serde(default)]
1853 pub product_id: String,
1854 #[serde(default)]
1855 pub position_id: String,
1856 #[serde(default)]
1857 pub base_coin: String,
1858 #[serde(default)]
1859 pub quote_coin: String,
1860 #[serde(default)]
1861 pub coin: String,
1862 #[serde(default)]
1863 pub amount: String,
1864 #[serde(default)]
1865 pub status: String,
1866 #[serde(default)]
1867 pub created_time: i64,
1868}
1869
1870pub type GetTokenOrderListResponse = TokenOrderListResult;
1871
1872pub type GetTokenProductResponse = TokenProduct;
1873
1874pub type GetTokenPositionResponse = TokenPosition;
1875
1876#[derive(Debug, Clone, Serialize, Deserialize)]
1877#[serde(rename_all = "camelCase")]
1878pub struct DailyYieldRecord {
1879 #[serde(default, rename = "yield")]
1880 pub yield_: String,
1881 #[serde(default)]
1882 pub bonus_yield: String,
1883 #[serde(default)]
1884 pub status: String,
1885 #[serde(default)]
1886 pub created_time: i64,
1887}
1888
1889pub type GetTokenDailyYieldResponse = TokenDailyYieldResult;
1890
1891pub type GetTokenHourlyYieldResponse = TokenHourlyYieldResult;
1892
1893pub type GetTokenHistoricalAprResponse = TokenAprHistoryResult;
1894
1895#[derive(Debug, Clone, Serialize, Deserialize)]
1896#[serde(rename_all = "camelCase")]
1897pub struct TieredApy {
1898 #[serde(default)]
1899 pub min: String,
1900 #[serde(default)]
1901 pub max: String,
1902 #[serde(default)]
1903 pub apy: String,
1904}
1905
1906#[derive(Debug, Clone, Serialize, Deserialize)]
1907#[serde(rename_all = "camelCase")]
1908pub struct InterestCoinApy {
1909 #[serde(default)]
1910 pub coin: String,
1911 #[serde(default)]
1912 pub apy: String,
1913 #[serde(default)]
1914 pub expect_unit_earning: String,
1915 #[serde(default)]
1916 pub current_price: String,
1917}
1918
1919#[derive(Debug, Clone, Serialize, Deserialize)]
1920#[serde(rename_all = "camelCase")]
1921pub struct PositionInterestCoinApy {
1922 #[serde(default)]
1923 pub coin: String,
1924 #[serde(default)]
1925 pub apy: String,
1926 #[serde(default)]
1927 pub expect_return_earning: String,
1928 #[serde(default)]
1929 pub price: String,
1930}
1931
1932#[derive(Debug, Clone, Serialize, Deserialize)]
1933#[serde(rename_all = "camelCase")]
1934pub struct YieldInfo {
1935 #[serde(default)]
1936 pub coin: String,
1937 #[serde(default)]
1938 pub amount: String,
1939 #[serde(default)]
1940 pub status: String,
1941 #[serde(default)]
1942 pub created_at: i64,
1943 #[serde(default)]
1944 pub apy: String,
1945}
1946
1947#[derive(Debug, Clone, Serialize, Deserialize)]
1948#[serde(rename_all = "camelCase")]
1949pub struct EarlyRedeemInfo {
1950 #[serde(default)]
1951 pub allow_early_redeem: bool,
1952 #[serde(default)]
1953 pub early_redeem_earning: String,
1954 #[serde(default)]
1955 pub return_coin: String,
1956 #[serde(default)]
1957 pub redemption_limit_duration: String,
1958}
1959
1960#[derive(Debug, Clone, Serialize, Deserialize)]
1961#[serde(rename_all = "camelCase")]
1962pub struct PwmInstSettleProfitParams {
1963 pub fund_id: String,
1964 pub req_link_id: String,
1965}
1966
1967#[derive(Debug, Clone, Serialize, Deserialize)]
1968#[serde(rename_all = "camelCase")]
1969pub struct PwmInstCreateFundParams {
1970 pub fund_name: String,
1971 pub coin: String,
1972 pub profit_share_rate: String,
1973 pub management_fee_rate: String,
1974 #[serde(skip_serializing_if = "Option::is_none")]
1975 pub fund_introduction: Option<String>,
1976 pub req_link_id: String,
1977}
1978
1979#[derive(Debug, Clone, Serialize, Deserialize)]
1980#[serde(rename_all = "camelCase")]
1981pub struct PwmInstCreateInvestmentPlanParams {
1982 pub account_uid: String,
1983 pub plan_name: String,
1984 pub plan_type: String,
1985 pub investment_distribution: Vec<InvestmentDistributionItem>,
1986 pub req_link_id: String,
1987}
1988
1989#[derive(Debug, Clone, Serialize, Deserialize)]
1990#[serde(rename_all = "camelCase")]
1991pub struct InvestmentDistributionItem {
1992 #[serde(skip_serializing_if = "Option::is_none")]
1993 pub fund_id: Option<String>,
1994 #[serde(skip_serializing_if = "Option::is_none")]
1995 pub percentage: Option<String>,
1996}
1997
1998#[derive(Debug, Clone, Serialize, Deserialize)]
1999#[serde(rename_all = "camelCase")]
2000pub struct PwmInstManageInvestmentPlanParams {
2001 pub plan_id: String,
2002 #[serde(skip_serializing_if = "Option::is_none")]
2003 pub update_status: Option<String>,
2004 #[serde(skip_serializing_if = "Option::is_none")]
2005 pub update_funds: Option<Vec<InvestmentDistributionItem>>,
2006 pub req_link_id: String,
2007}
2008
2009#[derive(Debug, Clone, Serialize, Deserialize)]
2010#[serde(rename_all = "camelCase")]
2011pub struct PwmInstManageOrderParams {
2012 pub order_id: String,
2013 pub action: String,
2014 pub req_link_id: String,
2015}
2016
2017#[derive(Debug, Clone, Serialize, Deserialize)]
2018#[serde(rename_all = "camelCase")]
2019pub struct PwmInstCreateSubAccountParams {
2020 pub fund_id: String,
2021 pub req_link_id: String,
2022}
2023
2024#[derive(Debug, Clone, Serialize, Deserialize)]
2025#[serde(rename_all = "camelCase")]
2026pub struct PwmFundTransferParams {
2027 pub transfer_id: String,
2028 pub from_user_id: i64,
2029 pub to_user_id: i64,
2030 pub amount: String,
2031 pub coin: String,
2032}
2033
2034pub type GetLMLiquidationRecordsResponse = serde_json::Value;
2035
2036pub type PwmInstListFundsResponse = serde_json::Value;
2037
2038pub type PwmInstSettleProfitResponse = serde_json::Value;
2039
2040pub type PwmInstCreateFundResponse = serde_json::Value;
2041
2042pub type PwmInstCreateInvestmentPlanResponse = serde_json::Value;
2043
2044pub type PwmInstGetInvestmentPlansResponse = serde_json::Value;
2045
2046pub type PwmInstManageInvestmentPlanResponse = serde_json::Value;
2047
2048pub type PwmInstListOrdersResponse = serde_json::Value;
2049
2050pub type PwmInstManageOrderResponse = serde_json::Value;
2051
2052pub type PwmInstCreateSubAccountResponse = serde_json::Value;
2053
2054pub type PwmFundTransferResponse = serde_json::Value;
2055
2056pub type PwmQueryFundTransferResponse = serde_json::Value;
2057
2058pub type PwmListInvestmentPlansResponse = serde_json::Value;
2059
2060pub type PwmGetPlanDetailResponse = serde_json::Value;
2061
2062pub type PwmGetNewPlanDetailResponse = serde_json::Value;
2063
2064#[derive(Debug, Clone, Serialize, Deserialize)]
2065#[serde(rename_all = "camelCase")]
2066pub struct RedeemFixedTermRequest {
2067 pub product_id: String,
2068 pub category: String,
2069 pub position_id: String,
2070}
2071
2072#[derive(Debug, Clone, Serialize, Deserialize)]
2073#[serde(rename_all = "camelCase")]
2074pub struct SetAutoInvestRequest {
2075 pub product_id: String,
2076 pub category: String,
2077 pub position_id: String,
2078 pub status: String,
2079}
2080
2081pub type GetRwaProductListResponse = serde_json::Value;
2082
2083#[derive(Debug, Clone, Serialize, Deserialize)]
2084#[serde(rename_all = "camelCase")]
2085pub struct PlaceRwaOrderRequest {
2086 pub product_id: i64,
2087 pub order_type: String,
2088 pub coin: String,
2089 #[serde(skip_serializing_if = "Option::is_none")]
2090 pub stake_amount: Option<String>,
2091 #[serde(skip_serializing_if = "Option::is_none")]
2092 pub redeem_shares: Option<String>,
2093 #[serde(skip_serializing_if = "Option::is_none")]
2094 pub account_type: Option<String>,
2095 pub order_link_id: String,
2096}
2097
2098pub type GetRwaPositionListResponse = serde_json::Value;
2099
2100pub type GetRwaOrderListResponse = serde_json::Value;
2101
2102pub type GetRwaNavChartResponse = serde_json::Value;
2103
2104pub type GetEarnProductResponse = serde_json::Value;
2105
2106#[derive(Debug, Clone, Serialize, Deserialize)]
2107#[serde(rename_all = "camelCase")]
2108pub struct PlaceOrderRequest {
2109 pub category: String,
2110 pub order_type: String,
2111 pub account_type: String,
2112 pub amount: String,
2113 pub coin: String,
2114 pub product_id: String,
2115 pub order_link_id: String,
2116 #[serde(skip_serializing_if = "Option::is_none")]
2117 pub redeem_position_id: Option<String>,
2118 #[serde(skip_serializing_if = "Option::is_none")]
2119 pub to_account_type: Option<String>,
2120 #[serde(skip_serializing_if = "Option::is_none")]
2121 pub interest_card: Option<InterestCardRef>,
2122}
2123
2124#[derive(Debug, Clone, Serialize, Deserialize)]
2125#[serde(rename_all = "camelCase")]
2126pub struct InterestCardRef {
2127 pub award_id: i64,
2128 pub spec_code: String,
2129}
2130
2131#[derive(Debug, Clone, Serialize, Deserialize)]
2132#[serde(rename_all = "camelCase")]
2133pub struct PwmClaimParams {
2134 pub plan_id: String,
2135 #[serde(skip_serializing_if = "Option::is_none")]
2136 pub to_account_type: Option<String>,
2137 pub order_link_id: String,
2138}
2139
2140pub type PwmClaimResponse = serde_json::Value;
2141
2142pub type PwmAssetTrendResponse = serde_json::Value;
2143
2144pub type PwmFundNavResponse = serde_json::Value;
2145
2146#[derive(Debug, Clone, Serialize, Deserialize)]
2147#[serde(rename_all = "camelCase")]
2148pub struct PwmSubscribeParams {
2149 pub plan_id: String,
2150 #[serde(skip_serializing_if = "Option::is_none")]
2151 pub account_type: Option<String>,
2152 pub order_link_id: String,
2153}
2154
2155pub type PwmSubscribeResponse = serde_json::Value;
2156
2157#[derive(Debug, Clone, Serialize, Deserialize)]
2158#[serde(rename_all = "camelCase")]
2159pub struct PwmInvestMoreParams {
2160 pub plan_id: String,
2161 #[serde(skip_serializing_if = "Option::is_none")]
2162 pub account_type: Option<String>,
2163 pub category: String,
2164 pub product_id: String,
2165 pub amount: String,
2166 pub order_link_id: String,
2167}
2168
2169pub type PwmInvestMoreResponse = serde_json::Value;
2170
2171#[derive(Debug, Clone, Serialize, Deserialize)]
2172#[serde(rename_all = "camelCase")]
2173pub struct PwmRedeemParams {
2174 pub plan_id: String,
2175 pub category: String,
2176 pub product_id: String,
2177 #[serde(skip_serializing_if = "Option::is_none")]
2178 pub shares: Option<String>,
2179 #[serde(skip_serializing_if = "Option::is_none")]
2180 pub amount: Option<String>,
2181 pub order_link_id: String,
2182 #[serde(skip_serializing_if = "Option::is_none")]
2183 pub position_id: Option<i64>,
2184}
2185
2186pub type PwmRedeemResponse = serde_json::Value;
2187
2188pub type PwmListOrderResponse = serde_json::Value;
2189
2190pub type PwmListProductCardsResponse = serde_json::Value;
2191
2192#[derive(Debug, Clone, Serialize, Deserialize)]
2193#[serde(rename_all = "camelCase")]
2194pub struct PwmCreateCustomPlanParams {
2195 #[serde(skip_serializing_if = "Option::is_none")]
2196 pub account_type: Option<String>,
2197 pub products: Vec<serde_json::Value>,
2198 pub order_link_id: String,
2199}
2200
2201pub type PwmCreateCustomPlanResponse = serde_json::Value;
2202
2203pub type PlaceEarnOrderResponse = serde_json::Value;
2204
2205#[derive(Debug, Clone, Serialize, Deserialize)]
2206#[serde(rename_all = "camelCase")]
2207pub struct EarnOrder {
2208 #[serde(skip_serializing_if = "Option::is_none")]
2209 pub coin: Option<String>,
2210 #[serde(skip_serializing_if = "Option::is_none")]
2211 pub order_value: Option<String>,
2212 #[serde(skip_serializing_if = "Option::is_none")]
2213 pub order_type: Option<String>,
2214 #[serde(skip_serializing_if = "Option::is_none")]
2215 pub order_id: Option<String>,
2216 #[serde(skip_serializing_if = "Option::is_none")]
2217 pub order_link_id: Option<String>,
2218 #[serde(skip_serializing_if = "Option::is_none")]
2219 pub status: Option<String>,
2220 #[serde(skip_serializing_if = "Option::is_none")]
2221 pub created_at: Option<String>,
2222 #[serde(skip_serializing_if = "Option::is_none")]
2223 pub updated_at: Option<String>,
2224 #[serde(skip_serializing_if = "Option::is_none")]
2225 pub product_id: Option<String>,
2226 #[serde(skip_serializing_if = "Option::is_none")]
2227 pub swap_order_value: Option<String>,
2228 #[serde(skip_serializing_if = "Option::is_none")]
2229 pub estimate_redeem_time: Option<String>,
2230 #[serde(skip_serializing_if = "Option::is_none")]
2231 pub estimate_stake_time: Option<String>,
2232}
2233
2234pub type GetEarnOrderHistoryResponse = serde_json::Value;
2235
2236#[derive(Debug, Clone, Serialize, Deserialize)]
2237#[serde(rename_all = "camelCase")]
2238pub struct EarnPosition {
2239 #[serde(skip_serializing_if = "Option::is_none")]
2240 pub coin: Option<String>,
2241 #[serde(skip_serializing_if = "Option::is_none")]
2242 pub product_id: Option<String>,
2243 #[serde(skip_serializing_if = "Option::is_none")]
2244 pub amount: Option<String>,
2245 #[serde(skip_serializing_if = "Option::is_none")]
2246 pub total_pnl: Option<String>,
2247 #[serde(skip_serializing_if = "Option::is_none")]
2248 pub claimable_yield: Option<String>,
2249 #[serde(skip_serializing_if = "Option::is_none")]
2250 pub id: Option<String>,
2251 #[serde(skip_serializing_if = "Option::is_none")]
2252 pub status: Option<String>,
2253 #[serde(skip_serializing_if = "Option::is_none")]
2254 pub order_id: Option<String>,
2255 #[serde(skip_serializing_if = "Option::is_none")]
2256 pub estimate_redeem_time: Option<String>,
2257 #[serde(skip_serializing_if = "Option::is_none")]
2258 pub estimate_stake_time: Option<String>,
2259 #[serde(skip_serializing_if = "Option::is_none")]
2260 pub estimate_interest_calculation_time: Option<String>,
2261 #[serde(skip_serializing_if = "Option::is_none")]
2262 pub settlement_time: Option<String>,
2263 #[serde(skip_serializing_if = "Option::is_none")]
2264 pub auto_reinvest: Option<String>,
2265}
2266
2267pub type GetEarnPositionResponse = serde_json::Value;
2268
2269#[derive(Debug, Clone, Serialize, Deserialize)]
2270#[serde(rename_all = "camelCase")]
2271pub struct YieldRecord {
2272 #[serde(skip_serializing_if = "Option::is_none")]
2273 pub product_id: Option<String>,
2274 #[serde(skip_serializing_if = "Option::is_none")]
2275 pub coin: Option<String>,
2276 #[serde(skip_serializing_if = "Option::is_none")]
2277 pub id: Option<String>,
2278 #[serde(skip_serializing_if = "Option::is_none")]
2279 pub amount: Option<String>,
2280 #[serde(skip_serializing_if = "Option::is_none")]
2281 pub yield_type: Option<String>,
2282 #[serde(skip_serializing_if = "Option::is_none")]
2283 pub distribution_mode: Option<String>,
2284 #[serde(skip_serializing_if = "Option::is_none")]
2285 pub effective_staking_amount: Option<String>,
2286 #[serde(skip_serializing_if = "Option::is_none")]
2287 pub order_id: Option<String>,
2288 #[serde(skip_serializing_if = "Option::is_none")]
2289 pub status: Option<String>,
2290 #[serde(skip_serializing_if = "Option::is_none")]
2291 pub created_at: Option<String>,
2292}
2293
2294pub type GetEarnYieldHistoryResponse = serde_json::Value;
2295
2296pub type GetEarnHourlyYieldHistoryResponse = serde_json::Value;
2297
2298#[derive(Debug, Clone, Serialize, Deserialize)]
2299#[serde(rename_all = "camelCase")]
2300pub struct ModifyEarnPositionRequest {
2301 pub category: String,
2302 pub product_id: i64,
2303 pub position_id: i64,
2304 pub auto_reinvest: i32,
2305}
2306
2307pub type GetEarnAprHistoryResponse = serde_json::Value;
2308
2309#[derive(Debug, Clone, Serialize, Deserialize)]
2310#[serde(rename_all = "camelCase")]
2311pub struct AwardCard {
2312 #[serde(skip_serializing_if = "Option::is_none")]
2313 pub award_id: Option<i64>,
2314 #[serde(skip_serializing_if = "Option::is_none")]
2315 pub spec_code: Option<String>,
2316 #[serde(skip_serializing_if = "Option::is_none")]
2317 pub claimed_at: Option<i64>,
2318 #[serde(skip_serializing_if = "Option::is_none")]
2319 pub used_at: Option<i64>,
2320 #[serde(skip_serializing_if = "Option::is_none")]
2321 pub expire_at: Option<i64>,
2322 #[serde(skip_serializing_if = "Option::is_none")]
2323 pub status: Option<String>,
2324 #[serde(skip_serializing_if = "Option::is_none")]
2325 pub amount: Option<String>,
2326 #[serde(skip_serializing_if = "Option::is_none")]
2327 pub limit_pnl_percentage: Option<String>,
2328 #[serde(skip_serializing_if = "Option::is_none")]
2329 pub base_coin: Option<String>,
2330 #[serde(skip_serializing_if = "Option::is_none")]
2331 pub quote_coin: Option<String>,
2332 #[serde(skip_serializing_if = "Option::is_none")]
2333 pub direction: Option<i32>,
2334 #[serde(skip_serializing_if = "Option::is_none")]
2335 pub category: Option<String>,
2336}
2337
2338pub type ListEarnCouponsResponse = serde_json::Value;
2339
2340#[derive(Debug, Clone, Serialize, Deserialize)]
2341#[serde(rename_all = "camelCase")]
2342pub struct HoldToEarnYieldCoin {
2343 #[serde(skip_serializing_if = "Option::is_none")]
2344 pub coin_name: Option<String>,
2345 #[serde(skip_serializing_if = "Option::is_none")]
2346 pub apy: Option<String>,
2347}
2348
2349#[derive(Debug, Clone, Serialize, Deserialize)]
2350#[serde(rename_all = "camelCase")]
2351pub struct AirdropDailyPnl {
2352 #[serde(skip_serializing_if = "Option::is_none")]
2353 pub coin_name: Option<String>,
2354 #[serde(skip_serializing_if = "Option::is_none")]
2355 pub yield_coin_name: Option<String>,
2356 #[serde(skip_serializing_if = "Option::is_none")]
2357 pub effective_amount: Option<String>,
2358 #[serde(skip_serializing_if = "Option::is_none")]
2359 pub pnl: Option<String>,
2360 #[serde(skip_serializing_if = "Option::is_none")]
2361 pub apy: Option<String>,
2362 #[serde(skip_serializing_if = "Option::is_none")]
2363 pub created_at: Option<i64>,
2364}
2365
2366#[derive(Debug, Clone, Serialize, Deserialize)]
2367#[serde(rename_all = "camelCase")]
2368pub struct PaginatedResult {
2369 #[serde(skip_serializing_if = "Option::is_none")]
2370 pub next_page_cursor: Option<String>,
2371}
2372
2373#[derive(Debug, Clone, Serialize, Deserialize)]
2374#[serde(rename_all = "camelCase")]
2375pub struct CoinApy {
2376 #[serde(skip_serializing_if = "Option::is_none")]
2377 pub coin: Option<i64>,
2378 #[serde(rename = "apy_e8", skip_serializing_if = "Option::is_none")]
2379 pub apy_e8: Option<i64>,
2380 #[serde(skip_serializing_if = "Option::is_none")]
2381 pub reward: Option<bool>,
2382}
2383
2384pub type GetLiquidityMiningProductsResponse = serde_json::Value;
2385
2386#[derive(Debug, Clone, Serialize, Deserialize)]
2387#[serde(rename_all = "camelCase")]
2388pub struct AddLiquidityRequest {
2389 pub product_id: String,
2390 pub order_link_id: String,
2391 #[serde(skip_serializing_if = "Option::is_none")]
2392 pub quote_account_type: Option<String>,
2393 #[serde(skip_serializing_if = "Option::is_none")]
2394 pub base_account_type: Option<String>,
2395 #[serde(skip_serializing_if = "Option::is_none")]
2396 pub quote_amount: Option<String>,
2397 #[serde(skip_serializing_if = "Option::is_none")]
2398 pub base_amount: Option<String>,
2399 #[serde(skip_serializing_if = "Option::is_none")]
2400 pub leverage: Option<String>,
2401}
2402
2403#[derive(Debug, Clone, Serialize, Deserialize)]
2404#[serde(rename_all = "camelCase")]
2405pub struct RemoveLiquidityRequest {
2406 pub product_id: String,
2407 pub order_link_id: String,
2408 pub position_id: String,
2409 #[serde(skip_serializing_if = "Option::is_none")]
2410 pub remove_rate: Option<i32>,
2411 #[serde(skip_serializing_if = "Option::is_none")]
2412 pub remove_type: Option<String>,
2413}
2414
2415#[derive(Debug, Clone, Serialize, Deserialize)]
2416#[serde(rename_all = "camelCase")]
2417pub struct ReinvestRequest {
2418 pub product_id: String,
2419 pub order_link_id: String,
2420 pub position_id: String,
2421}
2422
2423#[derive(Debug, Clone, Serialize, Deserialize)]
2424#[serde(rename_all = "camelCase")]
2425pub struct AddMarginRequest {
2426 pub product_id: String,
2427 pub order_link_id: String,
2428 pub position_id: String,
2429 pub amount: String,
2430 pub quote_account_type: String,
2431}
2432
2433pub type AddLiquidityResponse = serde_json::Value;
2434
2435#[derive(Debug, Clone, Serialize, Deserialize)]
2436#[serde(rename_all = "camelCase")]
2437pub struct ClaimInterestRequest {
2438 pub product_id: String,
2439}
2440
2441pub type GetLiquidityMiningPositionsResponse = serde_json::Value;
2442
2443pub type GetLiquidityMiningOrdersResponse = serde_json::Value;
2444
2445pub type GetLiquidityMiningYieldRecordsResponse = serde_json::Value;
2446
2447#[derive(Debug, Clone, Serialize, Deserialize)]
2448#[serde(rename_all = "camelCase")]
2449pub struct LMLiquidationRecord {
2450 #[serde(skip_serializing_if = "Option::is_none")]
2451 pub base_coin: Option<String>,
2452 #[serde(skip_serializing_if = "Option::is_none")]
2453 pub quote_coin: Option<String>,
2454 #[serde(skip_serializing_if = "Option::is_none")]
2455 pub base_amount: Option<String>,
2456 #[serde(skip_serializing_if = "Option::is_none")]
2457 pub quote_amount: Option<String>,
2458 #[serde(skip_serializing_if = "Option::is_none")]
2459 pub liquidation_price: Option<String>,
2460 #[serde(skip_serializing_if = "Option::is_none")]
2461 pub liquidation_time: Option<String>,
2462}
2463
2464pub type GetLiquidityMiningLiquidationRecordsResponse = serde_json::Value;
2465
2466#[derive(Debug, Clone, Serialize, Deserialize)]
2467#[serde(rename_all = "camelCase")]
2468pub struct PwmInstFundInfo {
2469 #[serde(skip_serializing_if = "Option::is_none")]
2470 pub fund_id: Option<String>,
2471 #[serde(skip_serializing_if = "Option::is_none")]
2472 pub fund_name: Option<String>,
2473 #[serde(skip_serializing_if = "Option::is_none")]
2474 pub coin: Option<String>,
2475 #[serde(skip_serializing_if = "Option::is_none")]
2476 pub status: Option<String>,
2477 #[serde(skip_serializing_if = "Option::is_none")]
2478 pub total_equity: Option<String>,
2479 #[serde(skip_serializing_if = "Option::is_none")]
2480 pub total_shares: Option<String>,
2481 #[serde(skip_serializing_if = "Option::is_none")]
2482 pub current_nav: Option<String>,
2483 #[serde(skip_serializing_if = "Option::is_none", rename = "currentAPR")]
2484 pub current_apr: Option<String>,
2485 #[serde(skip_serializing_if = "Option::is_none")]
2486 pub account_uid: Option<String>,
2487 #[serde(skip_serializing_if = "Option::is_none")]
2488 pub sub_account_list: Option<Vec<String>>,
2489 #[serde(skip_serializing_if = "Option::is_none")]
2490 pub profit_share_rate: Option<String>,
2491 #[serde(skip_serializing_if = "Option::is_none")]
2492 pub management_fee_rate: Option<String>,
2493 #[serde(skip_serializing_if = "Option::is_none")]
2494 pub uncollected_profit: Option<String>,
2495 #[serde(skip_serializing_if = "Option::is_none")]
2496 pub collected_profit: Option<String>,
2497 #[serde(skip_serializing_if = "Option::is_none")]
2498 pub total_loan: Option<String>,
2499 #[serde(skip_serializing_if = "Option::is_none")]
2500 pub created_time: Option<String>,
2501}
2502
2503#[derive(Debug, Clone, Serialize, Deserialize)]
2504#[serde(rename_all = "camelCase")]
2505pub struct PwmInstInvestmentDistributionItem {
2506 pub product_id: String,
2507 pub amount: String,
2508}
2509
2510#[derive(Debug, Clone, Serialize, Deserialize)]
2511#[serde(rename_all = "camelCase")]
2512pub struct PwmInstInvestmentDistribution {
2513 #[serde(skip_serializing_if = "Option::is_none")]
2514 pub category: Option<String>,
2515 #[serde(skip_serializing_if = "Option::is_none")]
2516 pub product_id: Option<String>,
2517 #[serde(skip_serializing_if = "Option::is_none")]
2518 pub coin: Option<String>,
2519 #[serde(skip_serializing_if = "Option::is_none")]
2520 pub current_amount: Option<String>,
2521}
2522
2523#[derive(Debug, Clone, Serialize, Deserialize)]
2524#[serde(rename_all = "camelCase")]
2525pub struct PwmInstInvestmentPlanInfo {
2526 #[serde(skip_serializing_if = "Option::is_none")]
2527 pub plan_id: Option<String>,
2528 #[serde(skip_serializing_if = "Option::is_none")]
2529 pub plan_name: Option<String>,
2530 #[serde(skip_serializing_if = "Option::is_none")]
2531 pub plan_type: Option<String>,
2532 #[serde(skip_serializing_if = "Option::is_none")]
2533 pub subscription_uid: Option<String>,
2534 #[serde(skip_serializing_if = "Option::is_none")]
2535 pub status: Option<String>,
2536 #[serde(skip_serializing_if = "Option::is_none")]
2537 pub source: Option<String>,
2538 #[serde(skip_serializing_if = "Option::is_none")]
2539 pub current_asset_usd: Option<String>,
2540 #[serde(skip_serializing_if = "Option::is_none")]
2541 pub accumulate_yield_usd: Option<String>,
2542 #[serde(skip_serializing_if = "Option::is_none")]
2543 pub investment_distribution: Option<Vec<PwmInstInvestmentDistribution>>,
2544 #[serde(skip_serializing_if = "Option::is_none")]
2545 pub created_time: Option<String>,
2546}
2547
2548pub type ClaimLiquidityInterestResponse = serde_json::Value;
2552
2553#[derive(Debug, Clone, Serialize, Deserialize)]
2554#[serde(rename_all = "camelCase")]
2555pub struct PwmCoinAmount {
2556 #[serde(skip_serializing_if = "Option::is_none")]
2557 pub coin: Option<String>,
2558 #[serde(skip_serializing_if = "Option::is_none")]
2559 pub amount: Option<String>,
2560}
2561
2562#[derive(Debug, Clone, Serialize, Deserialize)]
2563#[serde(rename_all = "camelCase")]
2564pub struct PwmInvestmentDistribution {
2565 #[serde(skip_serializing_if = "Option::is_none")]
2566 pub category: Option<String>,
2567 #[serde(skip_serializing_if = "Option::is_none")]
2568 pub product_id: Option<String>,
2569 #[serde(skip_serializing_if = "Option::is_none")]
2570 pub coin: Option<String>,
2571 #[serde(skip_serializing_if = "Option::is_none")]
2572 pub current_amount: Option<String>,
2573}
2574
2575#[derive(Debug, Clone, Serialize, Deserialize)]
2576#[serde(rename_all = "camelCase")]
2577pub struct PwmPositionItem {
2578 #[serde(skip_serializing_if = "Option::is_none")]
2579 pub category: Option<String>,
2580 #[serde(skip_serializing_if = "Option::is_none")]
2581 pub product_id: Option<String>,
2582 #[serde(skip_serializing_if = "Option::is_none")]
2583 pub coin: Option<String>,
2584 #[serde(skip_serializing_if = "Option::is_none")]
2585 pub current_amount: Option<String>,
2586 #[serde(skip_serializing_if = "Option::is_none")]
2587 pub accumulate_yield: Option<String>,
2588 #[serde(skip_serializing_if = "Option::is_none")]
2589 pub apr: Option<String>,
2590 #[serde(skip_serializing_if = "Option::is_none")]
2591 pub duration: Option<i32>,
2592 #[serde(skip_serializing_if = "Option::is_none")]
2593 pub maturity_time: Option<String>,
2594 #[serde(skip_serializing_if = "Option::is_none")]
2595 pub auto_reinvest: Option<bool>,
2596 #[serde(skip_serializing_if = "Option::is_none")]
2597 pub stake_amount: Option<String>,
2598 #[serde(skip_serializing_if = "Option::is_none")]
2599 pub position_id: Option<i64>,
2600 #[serde(skip_serializing_if = "Option::is_none")]
2601 pub status: Option<String>,
2602}
2603
2604#[derive(Debug, Clone, Serialize, Deserialize)]
2605#[serde(rename_all = "camelCase")]
2606pub struct PwmCategoryPositionGroup {
2607 #[serde(skip_serializing_if = "Option::is_none")]
2608 pub total_investment_usd: Option<String>,
2609 #[serde(skip_serializing_if = "Option::is_none")]
2610 pub accumulate_yield_usd: Option<String>,
2611 #[serde(skip_serializing_if = "Option::is_none")]
2612 pub weighted_avg_apr: Option<String>,
2613 #[serde(skip_serializing_if = "Option::is_none")]
2614 pub items: Option<Vec<PwmPositionItem>>,
2615}
2616
2617#[derive(Debug, Clone, Serialize, Deserialize)]
2618#[serde(rename_all = "camelCase")]
2619pub struct PwmEquityFundPositionItem {
2620 #[serde(skip_serializing_if = "Option::is_none")]
2621 pub category: Option<String>,
2622 #[serde(skip_serializing_if = "Option::is_none")]
2623 pub product_id: Option<String>,
2624 #[serde(skip_serializing_if = "Option::is_none")]
2625 pub fund_name: Option<String>,
2626 #[serde(skip_serializing_if = "Option::is_none")]
2627 pub coin: Option<String>,
2628 #[serde(skip_serializing_if = "Option::is_none")]
2629 pub tags: Option<Vec<String>>,
2630 #[serde(skip_serializing_if = "Option::is_none")]
2631 pub nav: Option<String>,
2632 #[serde(skip_serializing_if = "Option::is_none")]
2633 pub user_shares: Option<String>,
2634 #[serde(skip_serializing_if = "Option::is_none")]
2635 pub share_value: Option<String>,
2636 #[serde(skip_serializing_if = "Option::is_none")]
2637 pub holding_value: Option<String>,
2638 #[serde(skip_serializing_if = "Option::is_none")]
2639 pub accumulate_yield: Option<String>,
2640 #[serde(skip_serializing_if = "Option::is_none")]
2641 pub apr30d: Option<String>,
2642 #[serde(skip_serializing_if = "Option::is_none")]
2643 pub apr_total: Option<String>,
2644 #[serde(skip_serializing_if = "Option::is_none")]
2645 pub sharp_ratio: Option<String>,
2646 #[serde(skip_serializing_if = "Option::is_none")]
2647 pub max_drawdown: Option<String>,
2648 #[serde(skip_serializing_if = "Option::is_none")]
2649 pub created_time: Option<String>,
2650 #[serde(skip_serializing_if = "Option::is_none")]
2651 pub running_days: Option<i32>,
2652 #[serde(skip_serializing_if = "Option::is_none")]
2653 pub position_id: Option<i64>,
2654 #[serde(skip_serializing_if = "Option::is_none")]
2655 pub status: Option<String>,
2656}
2657
2658#[derive(Debug, Clone, Serialize, Deserialize)]
2659#[serde(rename_all = "camelCase")]
2660pub struct PwmEquityFundPositionGroup {
2661 #[serde(skip_serializing_if = "Option::is_none")]
2662 pub total_investment_usd: Option<String>,
2663 #[serde(skip_serializing_if = "Option::is_none")]
2664 pub accumulate_yield_usd: Option<String>,
2665 #[serde(skip_serializing_if = "Option::is_none")]
2666 pub weighted_avg_apr: Option<String>,
2667 #[serde(skip_serializing_if = "Option::is_none")]
2668 pub items: Option<Vec<PwmEquityFundPositionItem>>,
2669}
2670
2671#[derive(Debug, Clone, Serialize, Deserialize)]
2672#[serde(rename_all = "camelCase")]
2673pub struct PwmPlanPositions {
2674 #[serde(skip_serializing_if = "Option::is_none")]
2675 pub multi_coins_earning: Option<PwmCategoryPositionGroup>,
2676 #[serde(skip_serializing_if = "Option::is_none")]
2677 pub fixed_yield: Option<PwmCategoryPositionGroup>,
2678 #[serde(skip_serializing_if = "Option::is_none")]
2679 pub equity_funds: Option<PwmEquityFundPositionGroup>,
2680 #[serde(skip_serializing_if = "Option::is_none")]
2681 pub onchain_earn: Option<PwmCategoryPositionGroup>,
2682 #[serde(skip_serializing_if = "Option::is_none")]
2683 pub funding_account: Option<Vec<PwmCoinAmount>>,
2684}
2685
2686#[derive(Debug, Clone, Serialize, Deserialize)]
2687#[serde(rename_all = "camelCase")]
2688pub struct PwmFundIntroduction {
2689 #[serde(skip_serializing_if = "Option::is_none")]
2690 pub description: Option<String>,
2691 #[serde(skip_serializing_if = "Option::is_none")]
2692 pub historical_yield_rate_max: Option<String>,
2693 #[serde(skip_serializing_if = "Option::is_none")]
2694 pub historical_yield_rate_min: Option<String>,
2695 #[serde(skip_serializing_if = "Option::is_none")]
2696 pub sharp_ratio: Option<String>,
2697 #[serde(skip_serializing_if = "Option::is_none")]
2698 pub max_drawback: Option<String>,
2699 #[serde(skip_serializing_if = "Option::is_none")]
2700 pub lockup_period: Option<String>,
2701}
2702
2703#[derive(Debug, Clone, Serialize, Deserialize)]
2704#[serde(rename_all = "camelCase")]
2705pub struct PwmConfiguredProductItem {
2706 #[serde(skip_serializing_if = "Option::is_none")]
2707 pub category: Option<String>,
2708 #[serde(skip_serializing_if = "Option::is_none")]
2709 pub product_id: Option<String>,
2710 #[serde(skip_serializing_if = "Option::is_none")]
2711 pub fund_name: Option<String>,
2712 #[serde(skip_serializing_if = "Option::is_none")]
2713 pub coin: Option<String>,
2714 #[serde(skip_serializing_if = "Option::is_none")]
2715 pub configured_amount: Option<String>,
2716 #[serde(skip_serializing_if = "Option::is_none")]
2717 pub apr: Option<String>,
2718 #[serde(skip_serializing_if = "Option::is_none")]
2719 pub duration: Option<i32>,
2720 #[serde(skip_serializing_if = "Option::is_none")]
2721 pub tags: Option<Vec<String>>,
2722 #[serde(skip_serializing_if = "Option::is_none")]
2723 pub introduction: Option<PwmFundIntroduction>,
2724}
2725
2726#[derive(Debug, Clone, Serialize, Deserialize)]
2727#[serde(rename_all = "camelCase")]
2728pub struct PwmConfiguredProductGroup {
2729 #[serde(skip_serializing_if = "Option::is_none")]
2730 pub configured_amount_usd: Option<String>,
2731 #[serde(skip_serializing_if = "Option::is_none")]
2732 pub items: Option<Vec<PwmConfiguredProductItem>>,
2733}
2734
2735#[derive(Debug, Clone, Serialize, Deserialize)]
2736#[serde(rename_all = "camelCase")]
2737pub struct PwmNewPlanProducts {
2738 #[serde(skip_serializing_if = "Option::is_none")]
2739 pub multi_coins_earning: Option<PwmConfiguredProductGroup>,
2740 #[serde(skip_serializing_if = "Option::is_none")]
2741 pub fixed_yield: Option<PwmConfiguredProductGroup>,
2742 #[serde(skip_serializing_if = "Option::is_none")]
2743 pub equity_funds: Option<PwmConfiguredProductGroup>,
2744 #[serde(skip_serializing_if = "Option::is_none")]
2745 pub onchain_earn: Option<PwmConfiguredProductGroup>,
2746}
2747
2748#[derive(Debug, Clone, Serialize, Deserialize)]
2749#[serde(rename_all = "camelCase")]
2750pub struct PwmInvestmentPlanSummary {
2751 #[serde(skip_serializing_if = "Option::is_none")]
2752 pub plan_id: Option<String>,
2753 #[serde(skip_serializing_if = "Option::is_none")]
2754 pub plan_name: Option<String>,
2755 #[serde(skip_serializing_if = "Option::is_none")]
2756 pub plan_type: Option<String>,
2757 #[serde(skip_serializing_if = "Option::is_none")]
2758 pub status: Option<String>,
2759 #[serde(skip_serializing_if = "Option::is_none")]
2760 pub source: Option<String>,
2761 #[serde(skip_serializing_if = "Option::is_none")]
2762 pub current_asset_usd: Option<String>,
2763 #[serde(skip_serializing_if = "Option::is_none")]
2764 pub accumulate_yield_usd: Option<String>,
2765 #[serde(skip_serializing_if = "Option::is_none")]
2766 pub investment_distribution: Option<Vec<PwmInvestmentDistribution>>,
2767 #[serde(skip_serializing_if = "Option::is_none")]
2768 pub created_time: Option<String>,
2769}
2770
2771#[derive(Debug, Clone, Serialize, Deserialize)]
2772#[serde(rename_all = "camelCase")]
2773pub struct PwmInstUpdateFundItem {
2774 pub fund_id: String,
2775 pub amount: String,
2776}
2777
2778#[derive(Debug, Clone, Serialize, Deserialize)]
2779#[serde(rename_all = "camelCase")]
2780pub struct PwmInstOrderInfo {
2781 #[serde(skip_serializing_if = "Option::is_none")]
2782 pub order_id: Option<String>,
2783 #[serde(skip_serializing_if = "Option::is_none")]
2784 pub fund_id: Option<String>,
2785 #[serde(skip_serializing_if = "Option::is_none")]
2786 pub fund_name: Option<String>,
2787 #[serde(skip_serializing_if = "Option::is_none")]
2788 pub account_uid: Option<String>,
2789 #[serde(skip_serializing_if = "Option::is_none")]
2790 pub order_type: Option<String>,
2791 #[serde(skip_serializing_if = "Option::is_none")]
2792 pub coin: Option<String>,
2793 #[serde(skip_serializing_if = "Option::is_none")]
2794 pub amount: Option<String>,
2795 #[serde(skip_serializing_if = "Option::is_none")]
2796 pub shares: Option<String>,
2797 #[serde(skip_serializing_if = "Option::is_none")]
2798 pub status: Option<String>,
2799 #[serde(skip_serializing_if = "Option::is_none")]
2800 pub created_time: Option<String>,
2801}
2802
2803#[derive(Debug, Clone, Serialize, Deserialize)]
2804#[serde(rename_all = "camelCase")]
2805pub struct PwmFundTransferRecord {
2806 #[serde(skip_serializing_if = "Option::is_none")]
2807 pub transfer_id: Option<String>,
2808 #[serde(skip_serializing_if = "Option::is_none")]
2809 pub status: Option<String>,
2810 #[serde(skip_serializing_if = "Option::is_none")]
2811 pub from_user_id: Option<i64>,
2812 #[serde(skip_serializing_if = "Option::is_none")]
2813 pub to_user_id: Option<i64>,
2814 #[serde(skip_serializing_if = "Option::is_none")]
2815 pub amount: Option<String>,
2816 #[serde(skip_serializing_if = "Option::is_none")]
2817 pub coin: Option<String>,
2818}
2819
2820pub type PwmQueryFundTransferResultResponse = serde_json::Value;
2821
2822#[derive(Debug, Clone, Serialize, Deserialize)]
2823#[serde(rename_all = "camelCase")]
2824pub struct PwmPlanDetailResult {
2825 #[serde(skip_serializing_if = "Option::is_none")]
2826 pub plan_id: Option<String>,
2827 #[serde(skip_serializing_if = "Option::is_none")]
2828 pub plan_name: Option<String>,
2829 #[serde(skip_serializing_if = "Option::is_none")]
2830 pub plan_type: Option<String>,
2831 #[serde(skip_serializing_if = "Option::is_none")]
2832 pub status: Option<String>,
2833 #[serde(skip_serializing_if = "Option::is_none")]
2834 pub current_asset_usd: Option<String>,
2835 #[serde(skip_serializing_if = "Option::is_none")]
2836 pub accumulate_yield_usd: Option<String>,
2837 #[serde(skip_serializing_if = "Option::is_none")]
2838 pub weighted_avg_apr: Option<String>,
2839 #[serde(skip_serializing_if = "Option::is_none")]
2843 pub current_assets: Option<serde_json::Value>,
2844 #[serde(skip_serializing_if = "Option::is_none")]
2848 pub positions: Option<serde_json::Value>,
2849 #[serde(skip_serializing_if = "Option::is_none")]
2850 pub created_time: Option<String>,
2851}
2852
2853#[derive(Debug, Clone, Serialize, Deserialize)]
2854#[serde(rename_all = "camelCase")]
2855pub struct PwmNewPlanDetailResult {
2856 #[serde(skip_serializing_if = "Option::is_none")]
2857 pub plan_id: Option<String>,
2858 #[serde(skip_serializing_if = "Option::is_none")]
2859 pub plan_name: Option<String>,
2860 #[serde(skip_serializing_if = "Option::is_none")]
2861 pub plan_type: Option<String>,
2862 #[serde(skip_serializing_if = "Option::is_none")]
2863 pub status: Option<String>,
2864 #[serde(skip_serializing_if = "Option::is_none")]
2865 pub source: Option<String>,
2866 #[serde(skip_serializing_if = "Option::is_none")]
2867 pub total_configured_amount_usd: Option<String>,
2868 #[serde(skip_serializing_if = "Option::is_none")]
2872 pub products: Option<serde_json::Value>,
2873 #[serde(skip_serializing_if = "Option::is_none")]
2874 pub created_time: Option<String>,
2875}
2876
2877#[derive(Debug, Clone, Serialize, Deserialize)]
2878#[serde(rename_all = "camelCase")]
2879pub struct PwmClaimResult {
2880 #[serde(skip_serializing_if = "Option::is_none")]
2881 pub plan_id: Option<String>,
2882 #[serde(skip_serializing_if = "Option::is_none")]
2883 pub to_account_type: Option<String>,
2884 #[serde(skip_serializing_if = "Option::is_none")]
2885 pub status: Option<String>,
2886 #[serde(skip_serializing_if = "Option::is_none")]
2887 pub created_time: Option<String>,
2888}
2889
2890#[derive(Debug, Clone, Serialize, Deserialize)]
2891#[serde(rename_all = "camelCase")]
2892pub struct PwmAssetDataPoint {
2893 #[serde(skip_serializing_if = "Option::is_none")]
2894 pub date: Option<String>,
2895 #[serde(skip_serializing_if = "Option::is_none")]
2896 pub asset_value_usd: Option<String>,
2897}
2898
2899#[derive(Debug, Clone, Serialize, Deserialize)]
2900#[serde(rename_all = "camelCase")]
2901pub struct PwmAssetTrendResult {
2902 #[serde(skip_serializing_if = "Option::is_none")]
2903 pub plan_id: Option<String>,
2904 #[serde(skip_serializing_if = "Option::is_none")]
2905 pub data_points: Option<Vec<PwmAssetDataPoint>>,
2906}
2907
2908#[derive(Debug, Clone, Serialize, Deserialize)]
2909#[serde(rename_all = "camelCase")]
2910pub struct PwmNavDataPoint {
2911 #[serde(skip_serializing_if = "Option::is_none")]
2912 pub date: Option<String>,
2913 #[serde(skip_serializing_if = "Option::is_none")]
2914 pub nav: Option<String>,
2915}
2916
2917#[derive(Debug, Clone, Serialize, Deserialize)]
2918#[serde(rename_all = "camelCase")]
2919pub struct PwmFundNavResult {
2920 #[serde(skip_serializing_if = "Option::is_none")]
2921 pub fund_id: Option<String>,
2922 #[serde(skip_serializing_if = "Option::is_none")]
2923 pub fund_name: Option<String>,
2924 #[serde(skip_serializing_if = "Option::is_none")]
2925 pub coin: Option<String>,
2926 #[serde(skip_serializing_if = "Option::is_none")]
2927 pub current_nav: Option<String>,
2928 #[serde(skip_serializing_if = "Option::is_none")]
2929 pub data_points: Option<Vec<PwmNavDataPoint>>,
2930}
2931
2932#[derive(Debug, Clone, Serialize, Deserialize)]
2933#[serde(rename_all = "camelCase")]
2934pub struct PwmSubscribeRequest {
2935 pub plan_id: String,
2936 #[serde(skip_serializing_if = "Option::is_none")]
2937 pub account_type: Option<String>,
2938 pub order_link_id: String,
2939}
2940
2941#[derive(Debug, Clone, Serialize, Deserialize)]
2942#[serde(rename_all = "camelCase")]
2943pub struct PwmSubscribeResult {
2944 #[serde(skip_serializing_if = "Option::is_none")]
2945 pub plan_id: Option<String>,
2946 #[serde(skip_serializing_if = "Option::is_none")]
2947 pub status: Option<String>,
2948 #[serde(skip_serializing_if = "Option::is_none")]
2949 pub order_link_id: Option<String>,
2950}
2951
2952#[derive(Debug, Clone, Serialize, Deserialize)]
2953#[serde(rename_all = "camelCase")]
2954pub struct PwmInvestMoreRequest {
2955 pub plan_id: String,
2956 #[serde(skip_serializing_if = "Option::is_none")]
2957 pub account_type: Option<String>,
2958 pub category: String,
2959 pub product_id: String,
2960 pub amount: String,
2961 pub order_link_id: String,
2962}
2963
2964#[derive(Debug, Clone, Serialize, Deserialize)]
2965#[serde(rename_all = "camelCase")]
2966pub struct PwmInvestMoreResult {
2967 #[serde(skip_serializing_if = "Option::is_none")]
2968 pub plan_id: Option<String>,
2969 #[serde(skip_serializing_if = "Option::is_none")]
2970 pub category: Option<String>,
2971 #[serde(skip_serializing_if = "Option::is_none")]
2972 pub product_id: Option<String>,
2973 #[serde(skip_serializing_if = "Option::is_none")]
2974 pub coin: Option<String>,
2975 #[serde(skip_serializing_if = "Option::is_none")]
2976 pub amount: Option<String>,
2977 #[serde(skip_serializing_if = "Option::is_none")]
2978 pub status: Option<String>,
2979 #[serde(skip_serializing_if = "Option::is_none")]
2980 pub order_id: Option<String>,
2981 #[serde(skip_serializing_if = "Option::is_none")]
2982 pub order_link_id: Option<String>,
2983}
2984
2985#[derive(Debug, Clone, Serialize, Deserialize)]
2986#[serde(rename_all = "camelCase")]
2987pub struct PwmRedeemRequest {
2988 pub plan_id: String,
2989 pub category: String,
2990 pub product_id: String,
2991 #[serde(skip_serializing_if = "Option::is_none")]
2992 pub shares: Option<String>,
2993 #[serde(skip_serializing_if = "Option::is_none")]
2994 pub amount: Option<String>,
2995 pub order_link_id: String,
2996 #[serde(skip_serializing_if = "Option::is_none")]
2997 pub position_id: Option<i64>,
2998}
2999
3000#[derive(Debug, Clone, Serialize, Deserialize)]
3001#[serde(rename_all = "camelCase")]
3002pub struct PwmRedeemResult {
3003 #[serde(skip_serializing_if = "Option::is_none")]
3004 pub order_id: Option<String>,
3005 #[serde(skip_serializing_if = "Option::is_none")]
3006 pub plan_id: Option<String>,
3007 #[serde(skip_serializing_if = "Option::is_none")]
3008 pub category: Option<String>,
3009 #[serde(skip_serializing_if = "Option::is_none")]
3010 pub product_id: Option<String>,
3011 #[serde(skip_serializing_if = "Option::is_none")]
3012 pub shares: Option<String>,
3013 #[serde(skip_serializing_if = "Option::is_none")]
3014 pub amount: Option<String>,
3015 #[serde(skip_serializing_if = "Option::is_none")]
3016 pub estimated_amount: Option<String>,
3017 #[serde(skip_serializing_if = "Option::is_none")]
3018 pub coin: Option<String>,
3019 #[serde(skip_serializing_if = "Option::is_none")]
3020 pub status: Option<String>,
3021 #[serde(skip_serializing_if = "Option::is_none")]
3022 pub order_link_id: Option<String>,
3023}
3024
3025#[derive(Debug, Clone, Serialize, Deserialize)]
3026#[serde(rename_all = "camelCase")]
3027pub struct PwmOrderDetail {
3028 #[serde(skip_serializing_if = "Option::is_none")]
3029 pub order_id: Option<String>,
3030 #[serde(skip_serializing_if = "Option::is_none")]
3031 pub plan_id: Option<String>,
3032 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
3033 pub type_: Option<String>,
3034 #[serde(skip_serializing_if = "Option::is_none")]
3035 pub account_type: Option<String>,
3036 #[serde(skip_serializing_if = "Option::is_none")]
3037 pub coin: Option<String>,
3038 #[serde(skip_serializing_if = "Option::is_none")]
3039 pub amount: Option<String>,
3040 #[serde(skip_serializing_if = "Option::is_none")]
3041 pub category: Option<String>,
3042 #[serde(skip_serializing_if = "Option::is_none")]
3043 pub product_id: Option<String>,
3044 #[serde(skip_serializing_if = "Option::is_none")]
3045 pub status: Option<String>,
3046 #[serde(skip_serializing_if = "Option::is_none")]
3047 pub order_time: Option<String>,
3048}
3049
3050#[derive(Debug, Clone, Serialize, Deserialize)]
3051#[serde(rename_all = "camelCase")]
3052pub struct PwmListOrderResult {
3053 #[serde(skip_serializing_if = "Option::is_none")]
3054 pub next_page_cursor: Option<String>,
3055 #[serde(skip_serializing_if = "Option::is_none")]
3056 pub list: Option<Vec<PwmOrderDetail>>,
3057}
3058
3059#[derive(Debug, Clone, Serialize, Deserialize)]
3060#[serde(rename_all = "camelCase")]
3061pub struct PwmProductCard {
3062 #[serde(skip_serializing_if = "Option::is_none")]
3063 pub category: Option<String>,
3064 #[serde(skip_serializing_if = "Option::is_none")]
3065 pub product_id: Option<String>,
3066 #[serde(skip_serializing_if = "Option::is_none")]
3067 pub fund_name: Option<String>,
3068 #[serde(skip_serializing_if = "Option::is_none")]
3069 pub coin: Option<String>,
3070 #[serde(skip_serializing_if = "Option::is_none")]
3071 pub apr: Option<String>,
3072 #[serde(skip_serializing_if = "Option::is_none")]
3073 pub apr_range_low: Option<String>,
3074 #[serde(skip_serializing_if = "Option::is_none")]
3075 pub apr_range_high: Option<String>,
3076 #[serde(skip_serializing_if = "Option::is_none")]
3077 pub tags: Option<Vec<String>>,
3078 #[serde(skip_serializing_if = "Option::is_none")]
3079 pub introduction: Option<String>,
3080 #[serde(skip_serializing_if = "Option::is_none")]
3081 pub aum: Option<String>,
3082 #[serde(skip_serializing_if = "Option::is_none")]
3083 pub min_investment_amount: Option<String>,
3084 #[serde(skip_serializing_if = "Option::is_none")]
3085 pub max_investment_amount: Option<String>,
3086 #[serde(skip_serializing_if = "Option::is_none")]
3087 pub duration: Option<i32>,
3088 #[serde(skip_serializing_if = "Option::is_none")]
3089 pub max_drawdown: Option<String>,
3090 #[serde(skip_serializing_if = "Option::is_none")]
3091 pub sharp_ratio: Option<String>,
3092 #[serde(rename = "estAPR", skip_serializing_if = "Option::is_none")]
3093 pub est_apr: Option<String>,
3094}
3095
3096#[derive(Debug, Clone, Serialize, Deserialize)]
3097#[serde(rename_all = "camelCase")]
3098pub struct PwmProductTypeGroup {
3099 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
3100 pub type_: Option<String>,
3101 #[serde(skip_serializing_if = "Option::is_none")]
3102 pub cards: Option<Vec<PwmProductCard>>,
3103}
3104
3105#[derive(Debug, Clone, Serialize, Deserialize)]
3106#[serde(rename_all = "camelCase")]
3107pub struct PwmListProductCardsResult {
3108 #[serde(skip_serializing_if = "Option::is_none")]
3109 pub products: Option<Vec<PwmProductTypeGroup>>,
3110}
3111
3112#[derive(Debug, Clone, Serialize, Deserialize)]
3113#[serde(rename_all = "camelCase")]
3114pub struct PwmCreateCustomPlanProductItem {
3115 pub category: String,
3116 #[serde(skip_serializing_if = "Option::is_none")]
3117 pub product_id: Option<String>,
3118 #[serde(skip_serializing_if = "Option::is_none")]
3119 pub fund_name: Option<String>,
3120 pub amount: String,
3121}
3122
3123#[derive(Debug, Clone, Serialize, Deserialize)]
3124#[serde(rename_all = "camelCase")]
3125pub struct PwmCreateCustomPlanRequest {
3126 #[serde(skip_serializing_if = "Option::is_none")]
3127 pub account_type: Option<String>,
3128 pub products: Vec<PwmCreateCustomPlanProductItem>,
3129 pub order_link_id: String,
3130}
3131
3132#[derive(Debug, Clone, Serialize, Deserialize)]
3133#[serde(rename_all = "camelCase")]
3134pub struct PwmCreateCustomPlanResult {
3135 #[serde(skip_serializing_if = "Option::is_none")]
3136 pub plan_id: Option<String>,
3137 #[serde(skip_serializing_if = "Option::is_none")]
3138 pub plan_name: Option<String>,
3139 #[serde(skip_serializing_if = "Option::is_none")]
3140 pub status: Option<String>,
3141 #[serde(skip_serializing_if = "Option::is_none")]
3142 pub order_link_id: Option<String>,
3143}
3144
3145#[derive(Debug, Clone, Serialize, Deserialize)]
3146#[serde(rename_all = "camelCase")]
3147pub struct PwmClaimRequest {
3148 pub plan_id: String,
3149 #[serde(skip_serializing_if = "Option::is_none")]
3150 pub to_account_type: Option<String>,
3151 pub order_link_id: String,
3152}