1use derive_builder::Builder;
19use serde::{Deserialize, Serialize};
20
21use crate::common::enums::{
22 BybitAccountType, BybitExecType, BybitInstrumentStatus, BybitKlineInterval, BybitMarginMode,
23 BybitOptionType, BybitOrderSide, BybitOrderStatus, BybitOrderType, BybitPositionIdx,
24 BybitPositionMode, BybitProductType, BybitTimeInForce, BybitTpSlMode, BybitTriggerDirection,
25 BybitTriggerType,
26};
27
28#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
33#[serde(rename_all = "camelCase")]
34#[builder(default)]
35#[builder(setter(into))]
36pub struct BybitInstrumentsInfoParams {
37 pub category: BybitProductType,
38 #[builder(setter(strip_option))]
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub symbol: Option<String>,
41 #[builder(setter(strip_option))]
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub status: Option<BybitInstrumentStatus>,
44 #[builder(setter(strip_option))]
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub base_coin: Option<String>,
47 #[builder(setter(strip_option))]
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub limit: Option<u32>,
50 #[builder(setter(strip_option))]
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub cursor: Option<String>,
53}
54
55#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
60#[serde(rename_all = "camelCase")]
61#[builder(default)]
62#[builder(setter(into))]
63pub struct BybitTickersParams {
64 pub category: BybitProductType,
65 #[serde(skip_serializing_if = "Option::is_none")]
66 #[builder(setter(strip_option))]
67 pub symbol: Option<String>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 #[builder(setter(strip_option))]
70 pub base_coin: Option<String>,
71 #[serde(skip_serializing_if = "Option::is_none")]
72 #[builder(setter(strip_option))]
73 pub exp_date: Option<String>,
74}
75
76#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
81#[serde(rename_all = "camelCase")]
82#[builder(setter(into, strip_option), default)]
83pub struct BybitKlinesParams {
84 pub category: BybitProductType,
85 pub symbol: String,
86 pub interval: BybitKlineInterval,
87 #[serde(skip_serializing_if = "Option::is_none")]
88 pub start: Option<i64>,
89 #[serde(skip_serializing_if = "Option::is_none")]
90 pub end: Option<i64>,
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub limit: Option<u32>,
93}
94
95impl Default for BybitKlinesParams {
96 fn default() -> Self {
97 Self {
98 category: BybitProductType::Linear,
99 symbol: String::new(),
100 interval: BybitKlineInterval::Minute1,
101 start: None,
102 end: None,
103 limit: None,
104 }
105 }
106}
107
108#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
113#[serde(rename_all = "camelCase")]
114#[builder(setter(into, strip_option), default)]
115pub struct BybitTradesParams {
116 pub category: BybitProductType,
117 pub symbol: String,
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub base_coin: Option<String>,
120 #[serde(skip_serializing_if = "Option::is_none")]
121 pub option_type: Option<BybitOptionType>,
122 #[serde(skip_serializing_if = "Option::is_none")]
123 pub limit: Option<u32>,
124}
125
126impl Default for BybitTradesParams {
127 fn default() -> Self {
128 Self {
129 category: BybitProductType::Linear,
130 symbol: String::new(),
131 base_coin: None,
132 option_type: None,
133 limit: None,
134 }
135 }
136}
137
138#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
143#[serde(rename_all = "camelCase")]
144#[builder(default)]
145#[builder(setter(into))]
146pub struct BybitCoinInfoParams {
147 #[serde(skip_serializing_if = "Option::is_none")]
148 #[builder(setter(strip_option))]
149 pub coin: Option<String>,
150}
151
152#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
157#[serde(rename_all = "camelCase")]
158#[builder(default)]
159#[builder(setter(into))]
160pub struct BybitFeeRateParams {
161 pub category: BybitProductType,
162 #[builder(setter(strip_option))]
163 #[serde(skip_serializing_if = "Option::is_none")]
164 pub symbol: Option<String>,
165 #[builder(setter(strip_option))]
166 #[serde(skip_serializing_if = "Option::is_none")]
167 pub base_coin: Option<String>,
168}
169
170#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
175#[serde(rename_all = "camelCase")]
176pub struct BybitWalletBalanceParams {
177 pub account_type: BybitAccountType,
178 #[serde(skip_serializing_if = "Option::is_none")]
179 #[builder(setter(strip_option))]
180 pub coin: Option<String>,
181}
182
183#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
188#[serde(rename_all = "camelCase")]
189#[builder(default)]
190#[builder(setter(into))]
191pub struct BybitPositionListParams {
192 pub category: BybitProductType,
193 #[serde(skip_serializing_if = "Option::is_none")]
194 #[builder(setter(strip_option))]
195 pub symbol: Option<String>,
196 #[serde(skip_serializing_if = "Option::is_none")]
197 #[builder(setter(strip_option))]
198 pub base_coin: Option<String>,
199 #[serde(skip_serializing_if = "Option::is_none")]
200 #[builder(setter(strip_option))]
201 pub settle_coin: Option<String>,
202 #[serde(skip_serializing_if = "Option::is_none")]
203 #[builder(setter(strip_option))]
204 pub limit: Option<u32>,
205 #[serde(skip_serializing_if = "Option::is_none")]
206 #[builder(setter(strip_option))]
207 pub cursor: Option<String>,
208}
209
210#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
215#[serde(rename_all = "camelCase")]
216pub struct BybitSetMarginModeParams {
217 pub set_margin_mode: BybitMarginMode,
218}
219
220#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
225#[serde(rename_all = "camelCase")]
226pub struct BybitSetLeverageParams {
227 pub category: BybitProductType,
228 pub symbol: String,
229 pub buy_leverage: String,
230 pub sell_leverage: String,
231}
232
233#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
238#[serde(rename_all = "camelCase")]
239pub struct BybitSwitchModeParams {
240 pub category: BybitProductType,
241 #[builder(default)]
242 #[serde(skip_serializing_if = "Option::is_none")]
243 #[builder(setter(strip_option))]
244 pub symbol: Option<String>,
245 #[builder(default)]
246 #[serde(skip_serializing_if = "Option::is_none")]
247 #[builder(setter(strip_option))]
248 pub coin: Option<String>,
249 pub mode: BybitPositionMode,
250}
251
252#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
257#[serde(rename_all = "camelCase")]
258pub struct BybitSetTradingStopParams {
259 pub category: BybitProductType,
260 pub symbol: String,
261 pub position_idx: BybitPositionIdx,
262 #[serde(skip_serializing_if = "Option::is_none")]
263 pub take_profit: Option<String>,
264 #[serde(skip_serializing_if = "Option::is_none")]
265 pub stop_loss: Option<String>,
266 #[serde(skip_serializing_if = "Option::is_none")]
267 pub trailing_stop: Option<String>,
268 #[serde(skip_serializing_if = "Option::is_none")]
269 pub tp_trigger_by: Option<BybitTriggerType>,
270 #[serde(skip_serializing_if = "Option::is_none")]
271 pub sl_trigger_by: Option<BybitTriggerType>,
272 #[serde(skip_serializing_if = "Option::is_none")]
273 pub active_price: Option<String>,
274 #[serde(skip_serializing_if = "Option::is_none")]
275 pub tpsl_mode: Option<BybitTpSlMode>,
276 #[serde(skip_serializing_if = "Option::is_none")]
277 pub tp_size: Option<String>,
278 #[serde(skip_serializing_if = "Option::is_none")]
279 pub sl_size: Option<String>,
280 #[serde(skip_serializing_if = "Option::is_none")]
281 pub tp_limit_price: Option<String>,
282 #[serde(skip_serializing_if = "Option::is_none")]
283 pub sl_limit_price: Option<String>,
284 #[serde(skip_serializing_if = "Option::is_none")]
285 pub tp_order_type: Option<BybitOrderType>,
286 #[serde(skip_serializing_if = "Option::is_none")]
287 pub sl_order_type: Option<BybitOrderType>,
288}
289
290#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
296#[serde(rename_all = "camelCase")]
297pub struct BybitBorrowParams {
298 pub coin: String,
299 pub amount: String,
300}
301
302#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
308#[serde(rename_all = "camelCase")]
309pub struct BybitNoConvertRepayParams {
310 pub coin: String,
311 #[serde(skip_serializing_if = "Option::is_none")]
312 #[builder(setter(strip_option), default)]
313 pub amount: Option<String>,
314}
315
316#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
321#[serde(rename_all = "camelCase")]
322pub struct BybitBatchPlaceOrderEntry {
323 pub symbol: String,
324 #[builder(default)]
325 #[serde(skip_serializing_if = "Option::is_none")]
326 pub is_leverage: Option<i32>,
327 pub side: BybitOrderSide,
328 pub order_type: BybitOrderType,
329 pub qty: String,
330 #[builder(default)]
331 #[serde(skip_serializing_if = "Option::is_none")]
332 pub price: Option<String>,
333 #[builder(default)]
334 #[serde(skip_serializing_if = "Option::is_none")]
335 pub market_unit: Option<String>,
336 #[builder(default)]
337 #[serde(skip_serializing_if = "Option::is_none")]
338 pub trigger_direction: Option<BybitTriggerDirection>,
339 #[builder(default)]
340 #[serde(skip_serializing_if = "Option::is_none")]
341 pub order_filter: Option<String>,
342 #[builder(default)]
343 #[serde(skip_serializing_if = "Option::is_none")]
344 pub trigger_price: Option<String>,
345 #[builder(default)]
346 #[serde(skip_serializing_if = "Option::is_none")]
347 pub trigger_by: Option<BybitTriggerType>,
348 #[builder(default)]
349 #[serde(skip_serializing_if = "Option::is_none")]
350 pub order_iv: Option<String>,
351 #[builder(default)]
352 #[serde(skip_serializing_if = "Option::is_none")]
353 pub time_in_force: Option<BybitTimeInForce>,
354 #[builder(default)]
355 #[serde(skip_serializing_if = "Option::is_none")]
356 pub position_idx: Option<i32>,
357 #[builder(default)]
358 #[serde(skip_serializing_if = "Option::is_none")]
359 #[builder(setter(strip_option))]
360 pub order_link_id: Option<String>,
361 #[builder(default)]
362 #[serde(skip_serializing_if = "Option::is_none")]
363 pub take_profit: Option<String>,
364 #[builder(default)]
365 #[serde(skip_serializing_if = "Option::is_none")]
366 pub stop_loss: Option<String>,
367 #[builder(default)]
368 #[serde(skip_serializing_if = "Option::is_none")]
369 pub tp_trigger_by: Option<BybitTriggerType>,
370 #[builder(default)]
371 #[serde(skip_serializing_if = "Option::is_none")]
372 pub sl_trigger_by: Option<BybitTriggerType>,
373 #[builder(default)]
374 #[serde(skip_serializing_if = "Option::is_none")]
375 pub reduce_only: Option<bool>,
376 #[builder(default)]
377 #[serde(skip_serializing_if = "Option::is_none")]
378 pub close_on_trigger: Option<bool>,
379 #[builder(default)]
380 #[serde(skip_serializing_if = "Option::is_none")]
381 pub smp_type: Option<String>,
382 #[builder(default)]
383 #[serde(skip_serializing_if = "Option::is_none")]
384 pub mmp: Option<bool>,
385 #[builder(default)]
386 #[serde(skip_serializing_if = "Option::is_none")]
387 pub tpsl_mode: Option<BybitTpSlMode>,
388 #[builder(default)]
389 #[serde(skip_serializing_if = "Option::is_none")]
390 pub tp_limit_price: Option<String>,
391 #[builder(default)]
392 #[serde(skip_serializing_if = "Option::is_none")]
393 pub sl_limit_price: Option<String>,
394 #[builder(default)]
395 #[serde(skip_serializing_if = "Option::is_none")]
396 pub tp_order_type: Option<BybitOrderType>,
397 #[builder(default)]
398 #[serde(skip_serializing_if = "Option::is_none")]
399 pub sl_order_type: Option<BybitOrderType>,
400}
401
402#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
407#[serde(rename_all = "camelCase")]
408pub struct BybitBatchPlaceOrderParams {
409 pub category: BybitProductType,
410 pub request: Vec<BybitBatchPlaceOrderEntry>,
411}
412
413#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
418#[serde(rename_all = "camelCase")]
419pub struct BybitPlaceOrderParams {
420 #[serde(flatten)]
421 pub order: BybitBatchPlaceOrderEntry,
422 pub category: BybitProductType,
423 #[builder(default)]
424 #[serde(skip_serializing_if = "Option::is_none")]
425 pub slippage_tolerance_type: Option<String>,
426 #[builder(default)]
427 #[serde(skip_serializing_if = "Option::is_none")]
428 pub slippage_tolerance: Option<String>,
429}
430
431#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
436#[serde(rename_all = "camelCase")]
437pub struct BybitBatchAmendOrderEntry {
438 pub symbol: String,
439 #[serde(skip_serializing_if = "Option::is_none")]
440 #[builder(setter(strip_option))]
441 pub order_id: Option<String>,
442 #[serde(skip_serializing_if = "Option::is_none")]
443 #[builder(setter(strip_option))]
444 pub order_link_id: Option<String>,
445 #[serde(skip_serializing_if = "Option::is_none")]
446 pub order_iv: Option<String>,
447 #[serde(skip_serializing_if = "Option::is_none")]
448 pub trigger_price: Option<String>,
449 #[serde(skip_serializing_if = "Option::is_none")]
450 pub qty: Option<String>,
451 #[serde(skip_serializing_if = "Option::is_none")]
452 pub price: Option<String>,
453 #[serde(skip_serializing_if = "Option::is_none")]
454 pub tpsl_mode: Option<BybitTpSlMode>,
455 #[serde(skip_serializing_if = "Option::is_none")]
456 pub take_profit: Option<String>,
457 #[serde(skip_serializing_if = "Option::is_none")]
458 pub stop_loss: Option<String>,
459 #[serde(skip_serializing_if = "Option::is_none")]
460 pub tp_trigger_by: Option<BybitTriggerType>,
461 #[serde(skip_serializing_if = "Option::is_none")]
462 pub sl_trigger_by: Option<BybitTriggerType>,
463 #[serde(skip_serializing_if = "Option::is_none")]
464 pub trigger_by: Option<BybitTriggerType>,
465 #[serde(skip_serializing_if = "Option::is_none")]
466 pub tp_limit_price: Option<String>,
467 #[serde(skip_serializing_if = "Option::is_none")]
468 pub sl_limit_price: Option<String>,
469}
470
471#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
476#[serde(rename_all = "camelCase")]
477pub struct BybitBatchAmendOrderParams {
478 pub category: BybitProductType,
479 pub request: Vec<BybitBatchAmendOrderEntry>,
480}
481
482#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
487#[serde(rename_all = "camelCase")]
488pub struct BybitAmendOrderParams {
489 #[serde(flatten)]
490 pub order: BybitBatchAmendOrderEntry,
491 pub category: BybitProductType,
492}
493
494#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
499#[serde(rename_all = "camelCase")]
500pub struct BybitBatchCancelOrderEntry {
501 pub symbol: String,
502 #[serde(skip_serializing_if = "Option::is_none")]
503 #[builder(setter(strip_option))]
504 pub order_id: Option<String>,
505 #[serde(skip_serializing_if = "Option::is_none")]
506 #[builder(setter(strip_option))]
507 pub order_link_id: Option<String>,
508 #[serde(skip_serializing_if = "Option::is_none")]
509 pub order_filter: Option<String>,
510}
511
512#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
517#[serde(rename_all = "camelCase")]
518pub struct BybitBatchCancelOrderParams {
519 pub category: BybitProductType,
520 pub request: Vec<BybitBatchCancelOrderEntry>,
521}
522
523#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
528#[serde(rename_all = "camelCase")]
529pub struct BybitCancelOrderParams {
530 #[serde(flatten)]
531 pub order: BybitBatchCancelOrderEntry,
532 pub category: BybitProductType,
533}
534
535#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
540#[serde(rename_all = "camelCase")]
541#[builder(default)]
542#[builder(setter(into))]
543pub struct BybitCancelAllOrdersParams {
544 pub category: BybitProductType,
545 #[serde(skip_serializing_if = "Option::is_none")]
546 #[builder(setter(strip_option))]
547 pub symbol: Option<String>,
548 #[serde(skip_serializing_if = "Option::is_none")]
549 #[builder(setter(strip_option))]
550 pub base_coin: Option<String>,
551 #[serde(skip_serializing_if = "Option::is_none")]
552 #[builder(setter(strip_option))]
553 pub settle_coin: Option<String>,
554 #[serde(skip_serializing_if = "Option::is_none")]
555 #[builder(setter(strip_option))]
556 pub order_filter: Option<String>,
557 #[serde(skip_serializing_if = "Option::is_none")]
558 #[builder(setter(strip_option))]
559 pub stop_order_type: Option<String>,
560}
561
562#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
567#[serde(rename_all = "camelCase")]
568#[builder(default)]
569#[builder(setter(into))]
570pub struct BybitOpenOrdersParams {
571 pub category: BybitProductType,
572 #[serde(skip_serializing_if = "Option::is_none")]
573 #[builder(setter(strip_option))]
574 pub symbol: Option<String>,
575 #[serde(skip_serializing_if = "Option::is_none")]
576 #[builder(setter(strip_option))]
577 pub base_coin: Option<String>,
578 #[serde(skip_serializing_if = "Option::is_none")]
579 #[builder(setter(strip_option))]
580 pub settle_coin: Option<String>,
581 #[serde(skip_serializing_if = "Option::is_none")]
582 #[builder(setter(strip_option))]
583 pub order_id: Option<String>,
584 #[serde(skip_serializing_if = "Option::is_none")]
585 #[builder(setter(strip_option))]
586 pub order_link_id: Option<String>,
587 #[serde(skip_serializing_if = "Option::is_none")]
588 #[builder(setter(strip_option))]
589 pub open_only: Option<i32>,
590 #[serde(skip_serializing_if = "Option::is_none")]
591 #[builder(setter(strip_option))]
592 pub order_filter: Option<String>,
593 #[serde(skip_serializing_if = "Option::is_none")]
594 #[builder(setter(strip_option))]
595 pub limit: Option<u32>,
596 #[serde(skip_serializing_if = "Option::is_none")]
597 #[builder(setter(strip_option))]
598 pub cursor: Option<String>,
599}
600
601#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
606#[serde(rename_all = "camelCase")]
607#[builder(default)]
608#[builder(setter(into))]
609pub struct BybitOrderHistoryParams {
610 pub category: BybitProductType,
611 #[serde(skip_serializing_if = "Option::is_none")]
612 #[builder(setter(strip_option))]
613 pub symbol: Option<String>,
614 #[serde(skip_serializing_if = "Option::is_none")]
615 #[builder(setter(strip_option))]
616 pub base_coin: Option<String>,
617 #[serde(skip_serializing_if = "Option::is_none")]
618 #[builder(setter(strip_option))]
619 pub settle_coin: Option<String>,
620 #[serde(skip_serializing_if = "Option::is_none")]
621 #[builder(setter(strip_option))]
622 pub order_id: Option<String>,
623 #[serde(skip_serializing_if = "Option::is_none")]
624 #[builder(setter(strip_option))]
625 pub order_link_id: Option<String>,
626 #[serde(skip_serializing_if = "Option::is_none")]
627 #[builder(setter(strip_option))]
628 pub open_only: Option<i32>,
629 #[serde(skip_serializing_if = "Option::is_none")]
630 #[builder(setter(strip_option))]
631 pub order_filter: Option<String>,
632 #[serde(skip_serializing_if = "Option::is_none")]
633 #[builder(setter(strip_option))]
634 pub order_status: Option<BybitOrderStatus>,
635 #[serde(skip_serializing_if = "Option::is_none")]
636 #[builder(setter(strip_option))]
637 pub start_time: Option<i64>,
638 #[serde(skip_serializing_if = "Option::is_none")]
639 #[serde(rename = "endTime")]
640 #[builder(setter(strip_option))]
641 pub end_time: Option<i64>,
642 #[serde(skip_serializing_if = "Option::is_none")]
643 #[builder(setter(strip_option))]
644 pub limit: Option<u32>,
645 #[serde(skip_serializing_if = "Option::is_none")]
646 #[builder(setter(strip_option))]
647 pub cursor: Option<String>,
648}
649
650#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
655#[serde(rename_all = "camelCase")]
656#[builder(default)]
657#[builder(setter(into))]
658pub struct BybitTradeHistoryParams {
659 pub category: BybitProductType,
660 #[serde(skip_serializing_if = "Option::is_none")]
661 #[builder(setter(strip_option))]
662 pub symbol: Option<String>,
663 #[serde(skip_serializing_if = "Option::is_none")]
664 #[builder(setter(strip_option))]
665 pub base_coin: Option<String>,
666 #[serde(skip_serializing_if = "Option::is_none")]
667 #[builder(setter(strip_option))]
668 pub order_id: Option<String>,
669 #[serde(skip_serializing_if = "Option::is_none")]
670 #[builder(setter(strip_option))]
671 pub order_link_id: Option<String>,
672 #[serde(skip_serializing_if = "Option::is_none")]
673 #[builder(setter(strip_option))]
674 pub start_time: Option<i64>,
675 #[serde(skip_serializing_if = "Option::is_none")]
676 #[serde(rename = "endTime")]
677 #[builder(setter(strip_option))]
678 pub end_time: Option<i64>,
679 #[serde(skip_serializing_if = "Option::is_none")]
680 #[builder(setter(strip_option))]
681 pub exec_type: Option<BybitExecType>,
682 #[serde(skip_serializing_if = "Option::is_none")]
683 #[builder(setter(strip_option))]
684 pub limit: Option<u32>,
685 #[serde(skip_serializing_if = "Option::is_none")]
686 #[builder(setter(strip_option))]
687 pub cursor: Option<String>,
688}
689
690#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
695#[serde(rename_all = "camelCase")]
696#[builder(default)]
697#[builder(setter(into))]
698pub struct BybitUpdateSubApiParams {
699 #[serde(skip_serializing_if = "Option::is_none")]
700 #[builder(setter(strip_option))]
701 pub api_key: Option<String>,
702 #[serde(skip_serializing_if = "Option::is_none")]
703 #[builder(setter(strip_option))]
704 pub read_only: Option<i32>,
705 #[serde(skip_serializing_if = "Option::is_none")]
706 #[builder(setter(strip_option))]
707 pub ips: Option<String>,
708}