1use serde::{Deserialize, Serialize};
7
8use super::order::Direction;
9
10#[derive(Debug, Clone, Deserialize)]
12pub struct AccountInfo {
13 pub accounts: Vec<Account>,
15}
16
17#[derive(Debug, Clone, Deserialize)]
19pub struct Account {
20 #[serde(rename = "accountId")]
22 pub account_id: String,
23 #[serde(rename = "accountName")]
25 pub account_name: String,
26 #[serde(rename = "accountType")]
28 pub account_type: String,
29 pub balance: AccountBalance,
31 pub currency: String,
33 pub status: String,
35 pub preferred: bool,
37}
38
39#[derive(Debug, Clone, Deserialize)]
41pub struct AccountBalance {
42 pub balance: f64,
44 pub deposit: f64,
46 #[serde(rename = "profitLoss")]
48 pub profit_loss: f64,
49 pub available: f64,
51}
52
53#[derive(Debug, Clone, Deserialize)]
55pub struct AccountActivity {
56 pub activities: Vec<Activity>,
58}
59
60#[derive(Debug, Clone, Deserialize, Serialize)]
62pub struct Activity {
63 pub date: String,
65 #[serde(rename = "dealId")]
67 pub deal_id: String,
68 pub epic: String,
70 pub period: String,
72 #[serde(rename = "dealReference")]
74 pub deal_reference: String,
75 #[serde(rename = "activityType")]
77 pub activity_type: String,
78 pub status: String,
80 pub description: String,
82 pub details: Option<String>,
84}
85
86#[derive(Debug, Clone, Deserialize, Serialize)]
88pub struct Positions {
89 pub positions: Vec<Position>,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
95pub struct Position {
96 pub position: PositionDetails,
98 pub market: PositionMarket,
100 pub pnl: Option<f64>,
102}
103
104#[derive(Debug, Clone, Deserialize, Serialize)]
106pub struct PositionDetails {
107 #[serde(rename = "contractSize")]
109 pub contract_size: f64,
110 #[serde(rename = "createdDate")]
112 pub created_date: String,
113 #[serde(rename = "createdDateUTC")]
115 pub created_date_utc: String,
116 #[serde(rename = "dealId")]
118 pub deal_id: String,
119 #[serde(rename = "dealReference")]
121 pub deal_reference: String,
122 pub direction: Direction,
124 #[serde(rename = "limitLevel")]
126 pub limit_level: Option<f64>,
127 pub level: f64,
129 pub size: f64,
131 #[serde(rename = "stopLevel")]
133 pub stop_level: Option<f64>,
134 #[serde(rename = "trailingStep")]
136 pub trailing_step: Option<f64>,
137 #[serde(rename = "trailingStopDistance")]
139 pub trailing_stop_distance: Option<f64>,
140 pub currency: String,
142 #[serde(rename = "controlledRisk")]
144 pub controlled_risk: bool,
145 #[serde(rename = "limitedRiskPremium")]
147 pub limited_risk_premium: Option<f64>,
148}
149
150#[derive(Debug, Clone, Deserialize, Serialize)]
152pub struct PositionMarket {
153 #[serde(rename = "instrumentName")]
155 pub instrument_name: String,
156 pub expiry: String,
158 pub epic: String,
160 #[serde(rename = "instrumentType")]
162 pub instrument_type: String,
163 #[serde(rename = "lotSize")]
165 pub lot_size: f64,
166 pub high: f64,
168 pub low: f64,
170 #[serde(rename = "percentageChange")]
172 pub percentage_change: f64,
173 #[serde(rename = "netChange")]
175 pub net_change: f64,
176 pub bid: f64,
178 pub offer: f64,
180 #[serde(rename = "updateTime")]
182 pub update_time: String,
183 #[serde(rename = "updateTimeUTC")]
185 pub update_time_utc: String,
186 #[serde(rename = "delayTime")]
188 pub delay_time: i64,
189 #[serde(rename = "streamingPricesAvailable")]
191 pub streaming_prices_available: bool,
192 #[serde(rename = "marketStatus")]
194 pub market_status: String,
195 #[serde(rename = "scalingFactor")]
197 pub scaling_factor: i64,
198}
199
200#[derive(Debug, Clone, Deserialize, Serialize)]
202pub struct WorkingOrders {
203 pub working_orders: Vec<WorkingOrder>,
205}
206
207#[derive(Debug, Clone, Deserialize, Serialize)]
209pub struct WorkingOrder {
210 #[serde(rename = "workingOrderData")]
212 pub working_order_data: WorkingOrderData,
213 #[serde(rename = "marketData")]
215 pub market_data: MarketData,
216}
217
218#[derive(Debug, Clone, Deserialize, Serialize)]
220pub struct WorkingOrderData {
221 #[serde(rename = "dealId")]
223 pub deal_id: String,
224 pub direction: Direction,
226 pub epic: String,
228 #[serde(rename = "orderSize")]
230 pub order_size: f64,
231 #[serde(rename = "orderLevel")]
233 pub order_level: f64,
234 #[serde(rename = "timeInForce")]
236 pub time_in_force: String,
237 #[serde(rename = "goodTillDate")]
239 pub good_till_date: Option<String>,
240 #[serde(rename = "goodTillDateISO")]
242 pub good_till_date_iso: Option<String>,
243 #[serde(rename = "createdDate")]
245 pub created_date: String,
246 #[serde(rename = "createdDateUTC")]
248 pub created_date_utc: String,
249 #[serde(rename = "guaranteedStop")]
251 pub guaranteed_stop: bool,
252 #[serde(rename = "orderType")]
254 pub order_type: String,
255 #[serde(rename = "stopDistance")]
257 pub stop_distance: Option<f64>,
258 #[serde(rename = "limitDistance")]
260 pub limit_distance: Option<f64>,
261 #[serde(rename = "currencyCode")]
263 pub currency_code: String,
264 pub dma: bool,
266 #[serde(rename = "limitedRiskPremium")]
268 pub limited_risk_premium: Option<f64>,
269 #[serde(rename = "limitLevel", default)]
271 pub limit_level: Option<f64>,
272 #[serde(rename = "stopLevel", default)]
274 pub stop_level: Option<f64>,
275 #[serde(rename = "dealReference", default)]
277 pub deal_reference: Option<String>,
278}
279
280#[derive(Debug, Clone, Deserialize, Serialize)]
282pub struct MarketData {
283 #[serde(rename = "instrumentName")]
285 pub instrument_name: String,
286 #[serde(rename = "exchangeId")]
288 pub exchange_id: String,
289 pub expiry: String,
291 #[serde(rename = "marketStatus")]
293 pub market_status: String,
294 pub epic: String,
296 #[serde(rename = "instrumentType")]
298 pub instrument_type: String,
299 #[serde(rename = "lotSize")]
301 pub lot_size: f64,
302 pub high: f64,
304 pub low: f64,
306 #[serde(rename = "percentageChange")]
308 pub percentage_change: f64,
309 #[serde(rename = "netChange")]
311 pub net_change: f64,
312 pub bid: f64,
314 pub offer: f64,
316 #[serde(rename = "updateTime")]
318 pub update_time: String,
319 #[serde(rename = "updateTimeUTC")]
321 pub update_time_utc: String,
322 #[serde(rename = "delayTime")]
324 pub delay_time: i64,
325 #[serde(rename = "streamingPricesAvailable")]
327 pub streaming_prices_available: bool,
328 #[serde(rename = "scalingFactor")]
330 pub scaling_factor: i64,
331}
332
333#[derive(Debug, Clone, Deserialize, Serialize)]
335pub struct TransactionHistory {
336 pub transactions: Vec<AccountTransaction>,
338 pub metadata: TransactionMetadata,
340}
341
342#[derive(Debug, Clone, Deserialize, Serialize)]
344pub struct TransactionMetadata {
345 #[serde(rename = "pageData")]
347 pub page_data: PageData,
348 pub size: i32,
350}
351
352#[derive(Debug, Clone, Deserialize, Serialize)]
354pub struct PageData {
355 #[serde(rename = "pageNumber")]
357 pub page_number: i32,
358 #[serde(rename = "pageSize")]
360 pub page_size: i32,
361 #[serde(rename = "totalPages")]
363 pub total_pages: i32,
364}
365
366#[derive(Debug, Clone, Deserialize, Serialize)]
368pub struct AccountTransaction {
369 pub date: String,
371 #[serde(rename = "dateUtc")]
373 pub date_utc: String,
374 #[serde(rename = "instrumentName")]
376 pub instrument_name: String,
377 pub period: String,
379 #[serde(rename = "profitAndLoss")]
381 pub profit_and_loss: String,
382 #[serde(rename = "transactionType")]
384 pub transaction_type: String,
385 pub reference: String,
387 #[serde(rename = "openLevel")]
389 pub open_level: String,
390 #[serde(rename = "closeLevel")]
392 pub close_level: String,
393 pub size: String,
395 pub currency: String,
397 #[serde(rename = "cashTransaction")]
399 pub cash_transaction: bool,
400}