bpx_api_types/
capital.rs

1use rust_decimal::Decimal;
2use serde::{Deserialize, Serialize};
3use strum::{Display, EnumString};
4
5use crate::Blockchain;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct Balance {
10    pub available: Decimal,
11    pub locked: Decimal,
12    pub staked: Decimal,
13}
14
15impl Balance {
16    pub fn total(&self) -> Decimal {
17        self.available + self.locked + self.staked
18    }
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
22#[serde(rename_all = "camelCase")]
23pub struct Deposit {
24    pub id: i32,
25    pub to_address: Option<String>,
26    pub from_address: Option<String>,
27    pub confirmation_block_number: Option<i32>,
28    pub identifier: Option<String>,
29    pub transaction_hash: Option<String>,
30    pub source: DepositSource,
31    pub status: DepositStatus,
32    pub subaccount_id: Option<u64>,
33    pub symbol: String,
34    pub quantity: Decimal,
35    pub created_at: chrono::NaiveDateTime,
36}
37
38#[derive(Debug, Display, Clone, Copy, Serialize, Deserialize, EnumString, PartialEq, Eq, Hash)]
39#[strum(serialize_all = "camelCase")]
40#[serde(rename_all = "camelCase")]
41pub enum DepositSource {
42    Administrator,
43    Solana,
44    Ethereum,
45    Bitcoin,
46    Nuvei,
47}
48
49#[derive(Debug, Display, Clone, Copy, Serialize, Deserialize, EnumString, PartialEq, Eq, Hash)]
50#[strum(serialize_all = "camelCase")]
51#[serde(rename_all = "camelCase")]
52pub enum DepositStatus {
53    Pending,
54    Confirmed,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
58#[serde(rename_all = "camelCase")]
59pub struct DepositAddress {
60    pub address: String,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, Default)]
64#[serde(rename_all = "camelCase")]
65pub struct RequestWithdrawalPayload {
66    pub address: String,
67    pub blockchain: Blockchain,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub client_id: Option<String>,
70    pub quantity: Decimal,
71    pub symbol: String,
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub two_factor_token: Option<String>,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub auto_lend_redeem: Option<bool>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub auto_borrow: Option<bool>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
81#[serde(rename_all = "camelCase")]
82pub struct Withdrawal {
83    pub id: i32,
84    pub blockchain: Blockchain,
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub client_id: Option<String>,
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub identifier: Option<String>,
89    pub quantity: Decimal,
90    pub fee: Decimal,
91    pub symbol: String,
92    pub status: WithdrawalStatus,
93    #[serde(skip_serializing_if = "Option::is_none")]
94    pub subaccount_id: Option<u64>,
95    pub to_address: String,
96    #[serde(skip_serializing_if = "Option::is_none")]
97    pub transaction_hash: Option<String>,
98    pub created_at: chrono::NaiveDateTime,
99}
100
101#[derive(Debug, Display, Clone, Copy, Serialize, Deserialize, EnumString, PartialEq, Eq, Hash)]
102#[strum(serialize_all = "camelCase")]
103#[serde(rename_all = "camelCase")]
104pub enum WithdrawalStatus {
105    Pending,
106    Confirmed,
107    Verifying,
108    Void,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
112#[serde(rename_all = "camelCase")]
113pub struct Collateral {
114    pub assets_value: Decimal,
115    pub borrow_liability: Decimal,
116    pub collateral: Vec<CollateralItem>,
117    pub imf: Decimal,
118    pub unsettled_equity: Decimal,
119    pub liabilities_value: Decimal,
120    pub margin_fraction: Option<Decimal>,
121    pub mmf: Decimal,
122    pub net_equity: Decimal,
123    pub net_equity_available: Decimal,
124    pub net_equity_locked: Decimal,
125    pub net_exposure_futures: Decimal,
126    pub pnl_unrealized: Decimal,
127}
128
129#[derive(Debug, Clone, Serialize, Deserialize)]
130#[serde(rename_all = "camelCase")]
131pub struct CollateralItem {
132    pub symbol: String,
133    pub asset_mark_price: Decimal,
134    pub total_quantity: Decimal,
135    pub balance_notional: Decimal,
136    pub collateral_weight: Decimal,
137    pub collateral_value: Decimal,
138    pub open_order_quantity: Decimal,
139    pub lend_quantity: Decimal,
140    pub available_quantity: Decimal,
141}