Skip to main content

bybit_api/models/
broker.rs

1//! Broker models for broker earnings, account info, API limits, and voucher operations.
2
3use serde::{Deserialize, Serialize};
4
5/// Response for querying broker account info.
6pub type QueryBrokerAccountInfoResponse = BrokerAccountInfoResult;
7
8/// Broker account info result payload.
9#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct BrokerAccountInfoResult {
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub sub_acct_qty: Option<String>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub max_sub_acct_qty: Option<String>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub base_fee_rebate_rate: Option<BaseFeeRebateRate>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub markup_fee_rebate_rate: Option<MarkupFeeRebateRate>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub ts: Option<String>,
22}
23
24/// Base fee rebate rates by product line.
25#[derive(Debug, Clone, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub struct BaseFeeRebateRate {
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub spot: Option<String>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub derivatives: Option<String>,
32}
33
34/// Markup fee rebate rates by product line.
35#[derive(Debug, Clone, Serialize, Deserialize)]
36#[serde(rename_all = "camelCase")]
37pub struct MarkupFeeRebateRate {
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub spot: Option<String>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub derivatives: Option<String>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub convert: Option<String>,
44}
45
46/// Response for querying broker all UID details.
47pub type QueryBrokerAllUidDetailsResponse = QueryBrokerAllUidResult;
48
49/// Result payload for querying broker all UID details.
50#[derive(Debug, Clone, Serialize, Deserialize)]
51#[serde(rename_all = "camelCase")]
52pub struct QueryBrokerAllUidResult {
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub next_page_cursor: Option<String>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub list: Option<Vec<ApiLimitInfo>>,
57}
58
59/// API limit info entry.
60#[derive(Debug, Clone, Serialize, Deserialize)]
61#[serde(rename_all = "camelCase")]
62pub struct ApiLimitInfo {
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub uids: Option<String>,
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub biz_type: Option<String>,
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub rate: Option<i64>,
69}
70
71/// Response for querying broker capacity.
72pub type QueryBrokerCapResponse = QueryBrokerCapResult;
73
74/// Result payload for querying broker capacity.
75#[derive(Debug, Clone, Serialize, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct QueryBrokerCapResult {
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub list: Option<Vec<BrokerCapInfo>>,
80}
81
82/// Broker capacity info entry.
83#[derive(Debug, Clone, Serialize, Deserialize)]
84#[serde(rename_all = "camelCase")]
85pub struct BrokerCapInfo {
86    #[serde(skip_serializing_if = "Option::is_none")]
87    pub biz_type: Option<String>,
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub total_rate: Option<String>,
90    #[serde(skip_serializing_if = "Option::is_none")]
91    pub eb_cap: Option<String>,
92    #[serde(skip_serializing_if = "Option::is_none")]
93    pub uid_cap: Option<String>,
94}
95
96/// Request parameters for setting broker API limits.
97#[derive(Debug, Clone, Serialize, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct SetBrokerApiLimitParams {
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub list: Option<Vec<ApiLimitInfoRequest>>,
102}
103
104/// API limit info request entry.
105#[derive(Debug, Clone, Serialize, Deserialize)]
106#[serde(rename_all = "camelCase")]
107pub struct ApiLimitInfoRequest {
108    pub uids: String,
109    pub biz_type: String,
110    pub rate: i64,
111}
112
113/// Response for setting broker API limits.
114pub type SetBrokerApiLimitResponse = SetApiLimitResult;
115
116/// Result payload for setting broker API limits.
117#[derive(Debug, Clone, Serialize, Deserialize)]
118#[serde(rename_all = "camelCase")]
119pub struct SetApiLimitResult {
120    #[serde(skip_serializing_if = "Option::is_none")]
121    pub list: Option<Vec<ApiLimitInfoResult>>,
122}
123
124/// API limit info result entry returned after setting limits.
125#[derive(Debug, Clone, Serialize, Deserialize)]
126#[serde(rename_all = "camelCase")]
127pub struct ApiLimitInfoResult {
128    #[serde(skip_serializing_if = "Option::is_none")]
129    pub uids: Option<String>,
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub biz_type: Option<String>,
132    #[serde(skip_serializing_if = "Option::is_none")]
133    pub rate: Option<i64>,
134    #[serde(skip_serializing_if = "Option::is_none")]
135    pub success: Option<bool>,
136    #[serde(skip_serializing_if = "Option::is_none")]
137    pub msg: Option<String>,
138}
139
140/// Response for querying broker earnings.
141pub type QueryBrokerEarningResponse = BrokerEarningResult;
142
143/// Result payload for broker earnings.
144#[derive(Debug, Clone, Serialize, Deserialize)]
145#[serde(rename_all = "camelCase")]
146pub struct BrokerEarningResult {
147    #[serde(skip_serializing_if = "Option::is_none")]
148    pub total_earning_cat: Option<TotalEarningCat>,
149    #[serde(skip_serializing_if = "Option::is_none")]
150    pub details: Option<Vec<RebateDetail>>,
151    #[serde(skip_serializing_if = "Option::is_none")]
152    pub next_page_cursor: Option<String>,
153}
154
155/// Total earnings categorized by product line.
156#[derive(Debug, Clone, Serialize, Deserialize)]
157#[serde(rename_all = "camelCase")]
158pub struct TotalEarningCat {
159    #[serde(skip_serializing_if = "Option::is_none")]
160    pub spot: Option<Vec<TotalEarning>>,
161    #[serde(skip_serializing_if = "Option::is_none")]
162    pub derivatives: Option<Vec<TotalEarning>>,
163    #[serde(skip_serializing_if = "Option::is_none")]
164    pub options: Option<Vec<TotalEarning>>,
165    #[serde(skip_serializing_if = "Option::is_none")]
166    pub convert: Option<Vec<TotalEarning>>,
167    #[serde(skip_serializing_if = "Option::is_none")]
168    pub total: Option<Vec<TotalEarning>>,
169}
170
171/// Total earning entry by coin.
172#[derive(Debug, Clone, Serialize, Deserialize)]
173#[serde(rename_all = "camelCase")]
174pub struct TotalEarning {
175    #[serde(skip_serializing_if = "Option::is_none")]
176    pub coin: Option<String>,
177    #[serde(skip_serializing_if = "Option::is_none")]
178    pub earning: Option<String>,
179}
180
181/// Rebate detail entry.
182#[derive(Debug, Clone, Serialize, Deserialize)]
183#[serde(rename_all = "camelCase")]
184pub struct RebateDetail {
185    #[serde(skip_serializing_if = "Option::is_none")]
186    pub user_id: Option<String>,
187    #[serde(skip_serializing_if = "Option::is_none")]
188    pub biz_type: Option<String>,
189    #[serde(skip_serializing_if = "Option::is_none")]
190    pub symbol: Option<String>,
191    #[serde(skip_serializing_if = "Option::is_none")]
192    pub coin: Option<String>,
193    #[serde(skip_serializing_if = "Option::is_none")]
194    pub earning: Option<String>,
195    #[serde(skip_serializing_if = "Option::is_none")]
196    pub markup_earning: Option<String>,
197    #[serde(skip_serializing_if = "Option::is_none")]
198    pub base_fee_earning: Option<String>,
199    #[serde(skip_serializing_if = "Option::is_none")]
200    pub order_id: Option<String>,
201    #[serde(skip_serializing_if = "Option::is_none")]
202    pub exec_time: Option<String>,
203    #[serde(skip_serializing_if = "Option::is_none")]
204    pub exec_id: Option<String>,
205}
206
207/// Request parameters for fetching award info.
208#[derive(Debug, Clone, Serialize, Deserialize)]
209#[serde(rename_all = "camelCase")]
210pub struct GetAwardInfoParams {
211    pub id: String,
212}
213
214/// Response for fetching award info.
215#[derive(Debug, Clone, Serialize, Deserialize)]
216#[serde(rename_all = "camelCase")]
217pub struct GetAwardInfoResponse {
218    #[serde(default)]
219    pub id: String,
220    #[serde(default)]
221    pub coin: String,
222    #[serde(default)]
223    pub amount_unit: String,
224    #[serde(default)]
225    pub product_line: String,
226    #[serde(default)]
227    pub sub_product_line: String,
228    #[serde(default)]
229    pub total_amount: String,
230    #[serde(default)]
231    pub used_amount: String,
232}
233
234/// Request parameters for distributing an award to a sub-account.
235#[derive(Debug, Clone, Serialize, Deserialize)]
236#[serde(rename_all = "camelCase")]
237pub struct DistributeAwardParams {
238    pub account_id: String,
239    pub award_id: String,
240    pub spec_code: String,
241    pub amount: String,
242    pub broker_id: String,
243}
244
245/// Request parameters for retrieving an award distribution record.
246#[derive(Debug, Clone, Serialize, Deserialize)]
247#[serde(rename_all = "camelCase")]
248pub struct GetDistributionRecordParams {
249    pub account_id: String,
250    pub award_id: String,
251    pub spec_code: String,
252    #[serde(skip_serializing_if = "Option::is_none")]
253    pub with_used_amount: Option<bool>,
254}
255
256/// Response for retrieving an award distribution record.
257#[derive(Debug, Clone, Serialize, Deserialize)]
258#[serde(rename_all = "camelCase")]
259pub struct GetDistributionRecordResponse {
260    #[serde(default)]
261    pub account_id: String,
262    #[serde(default)]
263    pub award_id: String,
264    #[serde(default)]
265    pub spec_code: String,
266    #[serde(default)]
267    pub amount: String,
268    #[serde(default)]
269    pub is_claimed: bool,
270    #[serde(default)]
271    pub start_at: String,
272    #[serde(default)]
273    pub end_at: String,
274    #[serde(default)]
275    pub effective_at: String,
276    #[serde(default)]
277    pub ineffective_at: String,
278    #[serde(skip_serializing_if = "Option::is_none")]
279    pub used_amount: Option<String>,
280}