Skip to main content

mkt_types/
account.rs

1use derive_builder::Builder;
2use rust_decimal::Decimal;
3use time::OffsetDateTime;
4
5use crate::{Extensions, MarginMode, PositionSide, Symbol};
6
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8#[non_exhaustive]
9#[derive(Debug, Clone, PartialEq, Builder)]
10#[builder(pattern = "owned", setter(into))]
11pub struct Balance {
12    pub asset: String,
13    pub available: Decimal,
14    pub locked: Decimal,
15    pub total: Decimal,
16    #[cfg_attr(
17        feature = "serde",
18        serde(with = "time::serde::timestamp::milliseconds")
19    )]
20    pub timestamp: OffsetDateTime,
21    #[builder(default)]
22    pub extensions: Extensions,
23}
24
25impl Balance {
26    pub fn builder() -> BalanceBuilder {
27        BalanceBuilder::default()
28    }
29}
30
31#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
32#[non_exhaustive]
33#[derive(Debug, Clone, PartialEq, Builder)]
34#[builder(pattern = "owned", setter(into))]
35pub struct Position {
36    #[builder(default)]
37    pub position_id: Option<String>,
38    pub symbol: Symbol,
39    pub side: PositionSide,
40    #[builder(default)]
41    pub margin_mode: Option<MarginMode>,
42    pub quantity: Decimal,
43    #[builder(default)]
44    pub entry_price: Option<Decimal>,
45    #[builder(default)]
46    pub mark_price: Option<Decimal>,
47    #[builder(default)]
48    pub unrealized_pnl: Option<Decimal>,
49    #[builder(default)]
50    pub leverage: Option<Decimal>,
51    #[builder(default)]
52    pub liquidation_price: Option<Decimal>,
53    #[cfg_attr(
54        feature = "serde",
55        serde(with = "time::serde::timestamp::milliseconds")
56    )]
57    pub updated_at: OffsetDateTime,
58    #[builder(default)]
59    pub extensions: Extensions,
60}
61
62impl Position {
63    pub fn builder() -> PositionBuilder {
64        PositionBuilder::default()
65    }
66}