Skip to main content

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