use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::common::{
enums::{
BybitAccountType, BybitBboSideType, BybitExecType, BybitInstrumentStatus,
BybitKlineInterval, BybitMarginMode, BybitMarketUnit, BybitOpenOnly, BybitOptionType,
BybitOrderFilter, BybitOrderSide, BybitOrderStatus, BybitOrderType, BybitPositionIdx,
BybitPositionMode, BybitProductType, BybitSmpType, BybitStopOrderType, BybitTimeInForce,
BybitTpSlMode, BybitTriggerDirection, BybitTriggerType,
},
parse::opt_bool_as_int,
};
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitInstrumentsInfoParams {
pub category: BybitProductType,
#[builder(setter(strip_option))]
#[serde(skip_serializing_if = "Option::is_none")]
pub symbol: Option<String>,
#[builder(setter(strip_option))]
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<BybitInstrumentStatus>,
#[builder(setter(strip_option))]
#[serde(skip_serializing_if = "Option::is_none")]
pub base_coin: Option<String>,
#[builder(setter(strip_option))]
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
#[builder(setter(strip_option))]
#[serde(skip_serializing_if = "Option::is_none")]
pub cursor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitTickersParams {
pub category: BybitProductType,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub symbol: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub base_coin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub exp_date: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(setter(into, strip_option), default)]
pub struct BybitKlinesParams {
pub category: BybitProductType,
pub symbol: String,
pub interval: BybitKlineInterval,
#[serde(skip_serializing_if = "Option::is_none")]
pub start: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
}
impl Default for BybitKlinesParams {
fn default() -> Self {
Self {
category: BybitProductType::Linear,
symbol: String::new(),
interval: BybitKlineInterval::Minute1,
start: None,
end: None,
limit: None,
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(setter(into, strip_option), default)]
pub struct BybitTradesParams {
pub category: BybitProductType,
pub symbol: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub base_coin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub option_type: Option<BybitOptionType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
}
impl Default for BybitTradesParams {
fn default() -> Self {
Self {
category: BybitProductType::Linear,
symbol: String::new(),
base_coin: None,
option_type: None,
limit: None,
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(setter(into, strip_option), default)]
pub struct BybitFundingParams {
pub category: BybitProductType,
pub symbol: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
}
impl Default for BybitFundingParams {
fn default() -> Self {
Self {
category: BybitProductType::Linear,
symbol: String::new(),
start_time: None,
end_time: None,
limit: None,
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[builder(setter(into, strip_option), default)]
pub struct BybitOrderbookParams {
pub category: BybitProductType,
pub symbol: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
}
impl Default for BybitOrderbookParams {
fn default() -> Self {
Self {
category: BybitProductType::Linear,
symbol: String::new(),
limit: None,
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitCoinInfoParams {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub coin: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitFeeRateParams {
pub category: BybitProductType,
#[builder(setter(strip_option))]
#[serde(skip_serializing_if = "Option::is_none")]
pub symbol: Option<String>,
#[builder(setter(strip_option))]
#[serde(skip_serializing_if = "Option::is_none")]
pub base_coin: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitWalletBalanceParams {
pub account_type: BybitAccountType,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub coin: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitPositionListParams {
pub category: BybitProductType,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub symbol: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub base_coin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub settle_coin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub limit: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub cursor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitSetMarginModeParams {
pub set_margin_mode: BybitMarginMode,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitSetLeverageParams {
pub category: BybitProductType,
pub symbol: String,
pub buy_leverage: String,
pub sell_leverage: String,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitSwitchModeParams {
pub category: BybitProductType,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub symbol: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub coin: Option<String>,
pub mode: BybitPositionMode,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitSetTradingStopParams {
pub category: BybitProductType,
pub symbol: String,
pub position_idx: BybitPositionIdx,
#[serde(skip_serializing_if = "Option::is_none")]
pub take_profit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_loss: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trailing_stop: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_trigger_by: Option<BybitTriggerType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_trigger_by: Option<BybitTriggerType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub active_price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tpsl_mode: Option<BybitTpSlMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_size: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_size: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_limit_price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_limit_price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_order_type: Option<BybitOrderType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_order_type: Option<BybitOrderType>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitBorrowParams {
pub coin: String,
pub amount: String,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitNoConvertRepayParams {
pub coin: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option), default)]
pub amount: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitBatchPlaceOrderEntry {
pub symbol: String,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub is_leverage: Option<i32>,
pub side: BybitOrderSide,
pub order_type: BybitOrderType,
pub qty: String,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub price: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub market_unit: Option<BybitMarketUnit>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub trigger_direction: Option<BybitTriggerDirection>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub order_filter: Option<BybitOrderFilter>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub trigger_price: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub trigger_by: Option<BybitTriggerType>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub order_iv: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub time_in_force: Option<BybitTimeInForce>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub position_idx: Option<BybitPositionIdx>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_link_id: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub take_profit: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_loss: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_trigger_by: Option<BybitTriggerType>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_trigger_by: Option<BybitTriggerType>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub reduce_only: Option<bool>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub close_on_trigger: Option<bool>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub smp_type: Option<BybitSmpType>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub mmp: Option<bool>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub tpsl_mode: Option<BybitTpSlMode>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_limit_price: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_limit_price: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_order_type: Option<BybitOrderType>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_order_type: Option<BybitOrderType>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub bbo_side_type: Option<BybitBboSideType>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub bbo_level: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitBatchPlaceOrderParams {
pub category: BybitProductType,
pub request: Vec<BybitBatchPlaceOrderEntry>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitPlaceOrderParams {
#[serde(flatten)]
pub order: BybitBatchPlaceOrderEntry,
pub category: BybitProductType,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub slippage_tolerance_type: Option<String>,
#[builder(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub slippage_tolerance: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitBatchAmendOrderEntry {
pub symbol: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_link_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_iv: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trigger_price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub qty: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tpsl_mode: Option<BybitTpSlMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub take_profit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_loss: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_trigger_by: Option<BybitTriggerType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_trigger_by: Option<BybitTriggerType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trigger_by: Option<BybitTriggerType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_limit_price: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_limit_price: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitBatchAmendOrderParams {
pub category: BybitProductType,
pub request: Vec<BybitBatchAmendOrderEntry>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitAmendOrderParams {
#[serde(flatten)]
pub order: BybitBatchAmendOrderEntry,
pub category: BybitProductType,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitBatchCancelOrderEntry {
pub symbol: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_link_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order_filter: Option<BybitOrderFilter>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitBatchCancelOrderParams {
pub category: BybitProductType,
pub request: Vec<BybitBatchCancelOrderEntry>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct BybitCancelOrderParams {
#[serde(flatten)]
pub order: BybitBatchCancelOrderEntry,
pub category: BybitProductType,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitCancelAllOrdersParams {
pub category: BybitProductType,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub symbol: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub base_coin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub settle_coin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_filter: Option<BybitOrderFilter>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub stop_order_type: Option<BybitStopOrderType>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitOpenOrdersParams {
pub category: BybitProductType,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub symbol: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub base_coin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub settle_coin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_link_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub open_only: Option<BybitOpenOnly>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_filter: Option<BybitOrderFilter>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub limit: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub cursor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitOrderHistoryParams {
pub category: BybitProductType,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub symbol: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub base_coin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub settle_coin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_link_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub open_only: Option<BybitOpenOnly>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_filter: Option<BybitOrderFilter>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_status: Option<BybitOrderStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub start_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "endTime")]
#[builder(setter(strip_option))]
pub end_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub limit: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub cursor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitTradeHistoryParams {
pub category: BybitProductType,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub symbol: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub base_coin: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub order_link_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub start_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "endTime")]
#[builder(setter(strip_option))]
pub end_time: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub exec_type: Option<BybitExecType>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub limit: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub cursor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "PascalCase")]
#[builder(default)]
#[builder(setter(into, strip_option))]
pub struct BybitApiKeyPermissionUpdate {
#[serde(skip_serializing_if = "Option::is_none")]
pub contract_trade: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub spot: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wallet: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub derivatives: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exchange: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub earn: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub affiliate: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub block_trade: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub copy_trading: Option<Vec<String>>,
#[serde(rename = "NFT", skip_serializing_if = "Option::is_none")]
pub nft: Option<Vec<String>>,
#[serde(rename = "FiatP2P", skip_serializing_if = "Option::is_none")]
pub fiat_p2p: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fiat_bybit_pay: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fiat_bit_pay: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fiat_convert_broker: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bit_card: Option<Vec<String>>,
#[serde(rename = "ByXPost", skip_serializing_if = "Option::is_none")]
pub byx_post: Option<Vec<String>>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitUpdateSubApiParams {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub api_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", with = "opt_bool_as_int")]
#[builder(setter(strip_option))]
pub read_only: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub ips: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub permissions: Option<BybitApiKeyPermissionUpdate>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitUpdateMasterApiParams {
#[serde(skip_serializing_if = "Option::is_none", with = "opt_bool_as_int")]
#[builder(setter(strip_option))]
pub read_only: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub permissions: Option<BybitApiKeyPermissionUpdate>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(default)]
#[builder(setter(into))]
pub struct BybitSubMembersPageParams {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub page_size: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option))]
pub next_cursor: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Builder)]
#[serde(rename_all = "camelCase")]
#[builder(setter(into))]
pub struct BybitSubApiKeysParams {
pub sub_member_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option), default)]
pub limit: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(setter(strip_option), default)]
pub cursor: Option<String>,
}