xapi-binance 0.0.1

Binance API client
Documentation
use crate::data::enums::position_side::BnPositionSide;
use chrono::{DateTime, Utc};
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use serde_with::{TimestampMilliSeconds, formats::Flexible};
use xapi_shared::data::{crypto_asset::CryptoAsset, crypto_symbol::CryptoSymbol};

#[serde_with::serde_as]
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BnSpotAccountInformation {
    pub can_trade: bool,
    pub can_withdraw: bool,
    pub can_deposit: bool,
    pub brokered: bool,
    pub require_self_trade_prevention: bool,
    #[serde_as(as = "TimestampMilliSeconds<String, Flexible>")]
    pub update_time: DateTime<Utc>,
    pub account_type: BnSpotAccountType,
    pub balances: Vec<BnSpotAccountBalance>,
    pub uid: u64,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
pub enum BnSpotAccountType {
    Spot,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BnSpotAccountBalance {
    pub asset: CryptoAsset,
    pub free: Decimal,
    pub locked: Decimal,
}

#[serde_with::serde_as]
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BnUsdmAccountInformation {
    pub available_balance: Decimal,
    pub max_withdraw_amount: Decimal,
    pub assets: Vec<BnUsdmAccountAsset>,
    pub positions: Vec<BnUsdmAccountPosition>,
    #[serde_as(as = "TimestampMilliSeconds<String, Flexible>")]
    pub update_time: DateTime<Utc>,
}

#[serde_with::serde_as]
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BnUsdmAccountAsset {
    pub asset: CryptoAsset,
    pub wallet_balance: Decimal,
    pub unrealized_profit: Decimal,
    pub margin_balance: Decimal,
    pub maint_margin: Decimal,
    pub initial_margin: Decimal,
    pub position_initial_margin: Decimal,
    pub open_order_initial_margin: Decimal,
    pub cross_wallet_balance: Decimal,
    pub cross_un_pnl: Decimal,
    pub available_balance: Decimal,
    pub max_withdraw_amount: Decimal,
    #[serde_as(as = "TimestampMilliSeconds<String, Flexible>")]
    pub update_time: DateTime<Utc>,
}

#[serde_with::serde_as]
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BnUsdmAccountPosition {
    pub symbol: CryptoSymbol,
    pub position_side: BnPositionSide,
    pub position_amt: Decimal,
    pub unrealized_profit: Decimal,
    /// average entry price
    pub entry_price: Decimal,
    /// initial margin required with current mark price
    pub initial_margin: Decimal,
    /// maintenance margin required
    pub maint_margin: Decimal,
    /// current initial leverage
    pub leverage: Decimal,
    #[serde_as(as = "TimestampMilliSeconds<String, Flexible>")]
    pub update_time: DateTime<Utc>,
}