xapi_binance/data/
account_information.rs

1use crate::data::enums::position_side::BnPositionSide;
2use chrono::{DateTime, Utc};
3use rust_decimal::Decimal;
4use serde::{Deserialize, Serialize};
5use serde_with::{TimestampMilliSeconds, formats::Flexible};
6use xapi_shared::data::{crypto_asset::CryptoAsset, crypto_symbol::CryptoSymbol};
7
8#[serde_with::serde_as]
9#[derive(Debug, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct BnSpotAccountInformation {
12    pub can_trade: bool,
13    pub can_withdraw: bool,
14    pub can_deposit: bool,
15    pub brokered: bool,
16    pub require_self_trade_prevention: bool,
17    #[serde_as(as = "TimestampMilliSeconds<String, Flexible>")]
18    pub update_time: DateTime<Utc>,
19    pub account_type: BnSpotAccountType,
20    pub balances: Vec<BnSpotAccountBalance>,
21    pub uid: u64,
22}
23
24#[derive(Debug, Deserialize)]
25#[serde(rename_all = "UPPERCASE")]
26pub enum BnSpotAccountType {
27    Spot,
28}
29
30#[derive(Debug, Deserialize)]
31#[serde(rename_all = "camelCase")]
32pub struct BnSpotAccountBalance {
33    pub asset: CryptoAsset,
34    pub free: Decimal,
35    pub locked: Decimal,
36}
37
38#[serde_with::serde_as]
39#[derive(Debug, Serialize, Deserialize)]
40#[serde(rename_all = "camelCase")]
41pub struct BnUsdmAccountInformation {
42    pub available_balance: Decimal,
43    pub max_withdraw_amount: Decimal,
44    pub assets: Vec<BnUsdmAccountAsset>,
45    pub positions: Vec<BnUsdmAccountPosition>,
46    #[serde_as(as = "TimestampMilliSeconds<String, Flexible>")]
47    pub update_time: DateTime<Utc>,
48}
49
50#[serde_with::serde_as]
51#[derive(Debug, Serialize, Deserialize)]
52#[serde(rename_all = "camelCase")]
53pub struct BnUsdmAccountAsset {
54    pub asset: CryptoAsset,
55    pub wallet_balance: Decimal,
56    pub unrealized_profit: Decimal,
57    pub margin_balance: Decimal,
58    pub maint_margin: Decimal,
59    pub initial_margin: Decimal,
60    pub position_initial_margin: Decimal,
61    pub open_order_initial_margin: Decimal,
62    pub cross_wallet_balance: Decimal,
63    pub cross_un_pnl: Decimal,
64    pub available_balance: Decimal,
65    pub max_withdraw_amount: Decimal,
66    #[serde_as(as = "TimestampMilliSeconds<String, Flexible>")]
67    pub update_time: DateTime<Utc>,
68}
69
70#[serde_with::serde_as]
71#[derive(Debug, Serialize, Deserialize)]
72#[serde(rename_all = "camelCase")]
73pub struct BnUsdmAccountPosition {
74    pub symbol: CryptoSymbol,
75    pub position_side: BnPositionSide,
76    pub position_amt: Decimal,
77    pub unrealized_profit: Decimal,
78    /// average entry price
79    pub entry_price: Decimal,
80    /// initial margin required with current mark price
81    pub initial_margin: Decimal,
82    /// maintenance margin required
83    pub maint_margin: Decimal,
84    /// current initial leverage
85    pub leverage: Decimal,
86    #[serde_as(as = "TimestampMilliSeconds<String, Flexible>")]
87    pub update_time: DateTime<Utc>,
88}