coinbase_advanced/models/
perpetuals.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct IntxAmount {
8 #[serde(default)]
10 pub value: Option<String>,
11 #[serde(default)]
13 pub currency: Option<String>,
14}
15
16#[derive(Debug, Clone, Deserialize)]
18pub struct IntxPosition {
19 pub product_id: String,
21 #[serde(default)]
23 pub product_uuid: Option<String>,
24 #[serde(default)]
26 pub portfolio_uuid: Option<String>,
27 #[serde(default)]
29 pub symbol: Option<String>,
30 #[serde(default)]
32 pub vwap: Option<IntxAmount>,
33 #[serde(default)]
35 pub position_side: Option<String>,
36 #[serde(default)]
38 pub net_size: Option<String>,
39 #[serde(default)]
41 pub buy_order_size: Option<String>,
42 #[serde(default)]
44 pub sell_order_size: Option<String>,
45 #[serde(default)]
47 pub im_contribution: Option<String>,
48 #[serde(default)]
50 pub unrealized_pnl: Option<IntxAmount>,
51 #[serde(default)]
53 pub mark_price: Option<IntxAmount>,
54 #[serde(default)]
56 pub liquidation_price: Option<IntxAmount>,
57 #[serde(default)]
59 pub leverage: Option<String>,
60 #[serde(default)]
62 pub im_notional: Option<IntxAmount>,
63 #[serde(default)]
65 pub mm_notional: Option<IntxAmount>,
66 #[serde(default)]
68 pub position_notional: Option<String>,
69}
70
71#[derive(Debug, Clone, Deserialize)]
73pub struct IntxSummary {
74 #[serde(default)]
76 pub aggregated_pnl: Option<IntxAmount>,
77}
78
79#[derive(Debug, Clone, Deserialize)]
81pub struct ListPerpetualsPositionsResponse {
82 #[serde(default)]
84 pub positions: Vec<IntxPosition>,
85 #[serde(default)]
87 pub summary: Option<IntxSummary>,
88}
89
90#[derive(Debug, Clone, Deserialize)]
92pub struct GetPerpetualsPositionResponse {
93 pub position: IntxPosition,
95}
96
97#[derive(Debug, Clone, Deserialize)]
99pub struct IntxPortfolioBalance {
100 #[serde(default)]
102 pub asset: Option<String>,
103 #[serde(default)]
105 pub quantity: Option<String>,
106 #[serde(default)]
108 pub hold: Option<String>,
109 #[serde(default)]
111 pub transfer_hold: Option<String>,
112 #[serde(default)]
114 pub collateral_value: Option<String>,
115 #[serde(default)]
117 pub max_withdraw_amount: Option<String>,
118}
119
120#[derive(Debug, Clone, Deserialize)]
122pub struct GetPortfolioBalancesResponse {
123 #[serde(default)]
125 pub portfolio_balances: Vec<IntxPortfolioBalance>,
126}
127
128#[derive(Debug, Clone, Deserialize)]
130pub struct IntxPortfolioSummary {
131 #[serde(default)]
133 pub unrealized_pnl: Option<IntxAmount>,
134 #[serde(default)]
136 pub buying_power: Option<IntxAmount>,
137 #[serde(default)]
139 pub total_balance: Option<IntxAmount>,
140 #[serde(default)]
142 pub max_withdrawal_amount: Option<IntxAmount>,
143}
144
145#[derive(Debug, Clone, Deserialize)]
147pub struct GetPerpetualsPortfolioSummaryResponse {
148 pub summary: IntxPortfolioSummary,
150}
151
152#[derive(Debug, Clone, Serialize)]
154pub struct AllocatePortfolioRequest {
155 pub portfolio_uuid: String,
157 pub symbol: String,
159 pub amount: String,
161 pub currency: String,
163}
164
165impl AllocatePortfolioRequest {
166 pub fn new(
168 portfolio_uuid: impl Into<String>,
169 symbol: impl Into<String>,
170 amount: impl Into<String>,
171 currency: impl Into<String>,
172 ) -> Self {
173 Self {
174 portfolio_uuid: portfolio_uuid.into(),
175 symbol: symbol.into(),
176 amount: amount.into(),
177 currency: currency.into(),
178 }
179 }
180}
181
182#[derive(Debug, Clone, Serialize)]
184pub struct SetMultiAssetCollateralRequest {
185 pub multi_asset_collateral_enabled: bool,
187}
188
189impl SetMultiAssetCollateralRequest {
190 pub fn new(enabled: bool) -> Self {
192 Self {
193 multi_asset_collateral_enabled: enabled,
194 }
195 }
196}