xapi_binance/data/
account_information.rs1use 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 pub entry_price: Decimal,
80 pub initial_margin: Decimal,
82 pub maint_margin: Decimal,
84 pub leverage: Decimal,
86 #[serde_as(as = "TimestampMilliSeconds<String, Flexible>")]
87 pub update_time: DateTime<Utc>,
88}