nautilus_bybit/http/
query.rs

1// -------------------------------------------------------------------------------------------------
2//  Copyright (C) 2015-2025 Nautech Systems Pty Ltd. All rights reserved.
3//  https://nautechsystems.io
4//
5//  Licensed under the GNU Lesser General Public License Version 3.0 (the "License");
6//  You may not use this file except in compliance with the License.
7//  You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html
8//
9//  Unless required by applicable law or agreed to in writing, software
10//  distributed under the License is distributed on an "AS IS" BASIS,
11//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//  See the License for the specific language governing permissions and
13//  limitations under the License.
14// -------------------------------------------------------------------------------------------------
15
16//! Builder types for Bybit REST query parameters and filters.
17
18use 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/// Query parameters for `GET /v5/market/instruments-info`.
29///
30/// # References
31/// - <https://bybit-exchange.github.io/docs/v5/market/instrument>
32#[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/// Query parameters for `GET /v5/market/tickers`.
56///
57/// # References
58/// - <https://bybit-exchange.github.io/docs/v5/market/tickers>
59#[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/// Query parameters for `GET /v5/market/kline`.
77///
78/// # References
79/// - <https://bybit-exchange.github.io/docs/v5/market/kline>
80#[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/// Query parameters for `GET /v5/market/recent-trade`.
109///
110/// # References
111/// - <https://bybit-exchange.github.io/docs/v5/market/recent-trade>
112#[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/// Query parameters for `GET /v5/asset/coin/query-info`.
139///
140/// # References
141/// - <https://bybit-exchange.github.io/docs/v5/asset/coin-info>
142#[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/// Query parameters for `GET /v5/account/fee-rate`.
153///
154/// # References
155/// - <https://bybit-exchange.github.io/docs/v5/account/fee-rate>
156#[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/// Query parameters for `GET /v5/account/wallet-balance`.
171///
172/// # References
173/// - <https://bybit-exchange.github.io/docs/v5/account/wallet-balance>
174#[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/// Query parameters for `GET /v5/position/list`.
184///
185/// # References
186/// - <https://bybit-exchange.github.io/docs/v5/position>
187#[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/// Body parameters for `POST /v5/account/set-margin-mode`.
211///
212/// # References
213/// - <https://bybit-exchange.github.io/docs/v5/account/set-margin-mode>
214#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
215#[serde(rename_all = "camelCase")]
216pub struct BybitSetMarginModeParams {
217    pub set_margin_mode: BybitMarginMode,
218}
219
220/// Body parameters for `POST /v5/position/set-leverage`.
221///
222/// # References
223/// - <https://bybit-exchange.github.io/docs/v5/position/leverage>
224#[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/// Body parameters for `POST /v5/position/switch-mode`.
234///
235/// # References
236/// - <https://bybit-exchange.github.io/docs/v5/position/position-mode>
237#[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/// Body parameters for `POST /v5/position/trading-stop`.
253///
254/// # References
255/// - <https://bybit-exchange.github.io/docs/v5/position/trading-stop>
256#[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/// Body parameters for `POST /v5/account/borrow`.
291///
292/// # References
293///
294/// - <https://bybit-exchange.github.io/docs/v5/account/borrow>
295#[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/// Body parameters for `POST /v5/account/no-convert-repay`.
303///
304/// # References
305///
306/// - <https://bybit-exchange.github.io/docs/v5/account/no-convert-repay>
307#[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/// Order entry payload for `POST /v5/order/create-batch`.
317///
318/// # References
319/// - <https://bybit-exchange.github.io/docs/v5/order/batch-place>
320#[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/// Body parameters for `POST /v5/order/create-batch`.
403///
404/// # References
405/// - <https://bybit-exchange.github.io/docs/v5/order/batch-place>
406#[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/// Body parameters for `POST /v5/order/create`.
414///
415/// # References
416/// - <https://bybit-exchange.github.io/docs/v5/order/create-order>
417#[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/// Amend entry for `POST /v5/order/amend-batch`.
432///
433/// # References
434/// - <https://bybit-exchange.github.io/docs/v5/order/batch-amend>
435#[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/// Body parameters for `POST /v5/order/amend-batch`.
472///
473/// # References
474/// - <https://bybit-exchange.github.io/docs/v5/order/batch-amend>
475#[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/// Body parameters for `POST /v5/order/amend`.
483///
484/// # References
485/// - <https://bybit-exchange.github.io/docs/v5/order/amend-order>
486#[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/// Cancel entry for `POST /v5/order/cancel-batch`.
495///
496/// # References
497/// - <https://bybit-exchange.github.io/docs/v5/order/batch-cancel>
498#[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/// Body parameters for `POST /v5/order/cancel-batch`.
513///
514/// # References
515/// - <https://bybit-exchange.github.io/docs/v5/order/batch-cancel>
516#[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/// Body parameters for `POST /v5/order/cancel`.
524///
525/// # References
526/// - <https://bybit-exchange.github.io/docs/v5/order/cancel-order>
527#[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/// Body parameters for `POST /v5/order/cancel-all`.
536///
537/// # References
538/// - <https://bybit-exchange.github.io/docs/v5/order/cancel-all>
539#[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/// Query parameters for `GET /v5/order/realtime`.
563///
564/// # References
565/// - <https://bybit-exchange.github.io/docs/v5/order/order-list>
566#[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/// Query parameters for `GET /v5/order/history`.
602///
603/// # References
604/// - <https://bybit-exchange.github.io/docs/v5/order/order-list>
605#[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/// Query parameters for `GET /v5/execution/list`.
651///
652/// # References
653/// - <https://bybit-exchange.github.io/docs/v5/order/execution>
654#[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/// Body parameters for `POST /v5/user/update-sub-api`.
691///
692/// # References
693/// - <https://bybit-exchange.github.io/docs/v5/user/modify-sub-apikey>
694#[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}