1use crate::models::common::*;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct PositionList {
10 pub category: String,
12 pub list: Vec<Position>,
14 #[serde(default)]
16 pub next_page_cursor: String,
17}
18
19#[derive(Debug, Clone, Deserialize)]
21#[serde(rename_all = "camelCase")]
22pub struct Position {
23 pub position_idx: i32,
25 #[serde(default)]
27 pub risk_id: i32,
28 #[serde(default)]
30 pub risk_limit_value: String,
31 pub symbol: String,
33 pub side: String,
35 pub size: String,
37 #[serde(default)]
39 pub avg_price: String,
40 #[serde(default)]
42 pub position_value: String,
43 #[serde(default)]
45 pub trade_mode: i32,
46 #[serde(default)]
48 pub position_status: String,
49 #[serde(default)]
51 pub leverage: String,
52 #[serde(default)]
54 pub mark_price: String,
55 #[serde(default)]
57 pub liq_price: String,
58 #[serde(default)]
60 pub bust_price: String,
61 #[serde(default)]
63 pub position_mm: String,
64 #[serde(default)]
66 pub position_im: String,
67 #[serde(default)]
69 pub take_profit: String,
70 #[serde(default)]
72 pub stop_loss: String,
73 #[serde(default)]
75 pub trailing_stop: String,
76 #[serde(default)]
78 pub unrealised_pnl: String,
79 #[serde(default)]
81 pub cum_realised_pnl: String,
82 #[serde(default)]
84 pub created_time: String,
85 #[serde(default)]
87 pub updated_time: String,
88}
89
90#[derive(Debug, Clone, Serialize)]
92#[serde(rename_all = "camelCase")]
93pub struct SetLeverageParams {
94 pub category: Category,
96 pub symbol: String,
98 pub buy_leverage: String,
100 pub sell_leverage: String,
102}
103
104#[derive(Debug, Clone, Serialize)]
106#[serde(rename_all = "camelCase")]
107pub struct TradingStopParams {
108 pub category: Category,
110 pub symbol: String,
112 #[serde(skip_serializing_if = "Option::is_none")]
114 pub take_profit: Option<String>,
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub stop_loss: Option<String>,
118 #[serde(skip_serializing_if = "Option::is_none")]
120 pub trailing_stop: Option<String>,
121 #[serde(skip_serializing_if = "Option::is_none")]
123 pub tp_trigger_by: Option<TriggerBy>,
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub sl_trigger_by: Option<TriggerBy>,
127 #[serde(skip_serializing_if = "Option::is_none")]
129 pub position_idx: Option<i32>,
130}
131
132#[derive(Debug, Clone, Serialize)]
134#[serde(rename_all = "camelCase")]
135pub struct SwitchPositionModeParams {
136 pub category: Category,
138 #[serde(skip_serializing_if = "Option::is_none")]
140 pub symbol: Option<String>,
141 #[serde(skip_serializing_if = "Option::is_none")]
143 pub coin: Option<String>,
144 pub mode: i32,
146}
147
148#[derive(Debug, Clone, Serialize)]
150#[serde(rename_all = "camelCase")]
151pub struct SetRiskLimitParams {
152 pub category: Category,
154 pub symbol: String,
156 pub risk_id: i32,
158 #[serde(skip_serializing_if = "Option::is_none")]
160 pub position_idx: Option<i32>,
161}
162
163#[derive(Debug, Clone, Serialize)]
165#[serde(rename_all = "camelCase")]
166pub struct AddMarginParams {
167 pub category: Category,
169 pub symbol: String,
171 pub margin: String,
173 #[serde(skip_serializing_if = "Option::is_none")]
175 pub position_idx: Option<i32>,
176}
177
178#[derive(Debug, Clone, Deserialize)]
180#[serde(rename_all = "camelCase")]
181pub struct ClosedPnlList {
182 pub category: String,
184 pub list: Vec<ClosedPnl>,
186 #[serde(default)]
188 pub next_page_cursor: String,
189}
190
191#[derive(Debug, Clone, Deserialize)]
193#[serde(rename_all = "camelCase")]
194pub struct ClosedPnl {
195 pub symbol: String,
197 pub order_id: String,
199 pub side: String,
201 pub qty: String,
203 pub order_price: String,
205 pub order_type: String,
207 pub exec_type: String,
209 pub closed_size: String,
211 pub cum_entry_value: String,
213 pub avg_entry_price: String,
215 pub cum_exit_value: String,
217 pub avg_exit_price: String,
219 pub closed_pnl: String,
221 pub fill_count: String,
223 pub leverage: String,
225 pub created_time: String,
227 pub updated_time: String,
229}
230
231#[derive(Debug, Clone, Deserialize)]
233#[serde(rename_all = "camelCase")]
234pub struct ExecutionList {
235 pub category: String,
237 pub list: Vec<Execution>,
239 #[serde(default)]
241 pub next_page_cursor: String,
242}
243
244#[derive(Debug, Clone, Deserialize)]
246#[serde(rename_all = "camelCase")]
247pub struct Execution {
248 pub symbol: String,
250 pub order_id: String,
252 #[serde(default)]
254 pub order_link_id: String,
255 pub side: String,
257 pub order_price: String,
259 pub order_qty: String,
261 pub order_type: String,
263 pub exec_id: String,
265 pub exec_price: String,
267 pub exec_qty: String,
269 pub exec_fee: String,
271 pub exec_type: String,
273 pub exec_value: String,
275 #[serde(default)]
277 pub fee_rate: String,
278 pub exec_time: String,
280}