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