use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct IntxAmount {
#[serde(default)]
pub value: Option<String>,
#[serde(default)]
pub currency: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct IntxPosition {
pub product_id: String,
#[serde(default)]
pub product_uuid: Option<String>,
#[serde(default)]
pub portfolio_uuid: Option<String>,
#[serde(default)]
pub symbol: Option<String>,
#[serde(default)]
pub vwap: Option<IntxAmount>,
#[serde(default)]
pub position_side: Option<String>,
#[serde(default)]
pub net_size: Option<String>,
#[serde(default)]
pub buy_order_size: Option<String>,
#[serde(default)]
pub sell_order_size: Option<String>,
#[serde(default)]
pub im_contribution: Option<String>,
#[serde(default)]
pub unrealized_pnl: Option<IntxAmount>,
#[serde(default)]
pub mark_price: Option<IntxAmount>,
#[serde(default)]
pub liquidation_price: Option<IntxAmount>,
#[serde(default)]
pub leverage: Option<String>,
#[serde(default)]
pub im_notional: Option<IntxAmount>,
#[serde(default)]
pub mm_notional: Option<IntxAmount>,
#[serde(default)]
pub position_notional: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct IntxSummary {
#[serde(default)]
pub aggregated_pnl: Option<IntxAmount>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ListPerpetualsPositionsResponse {
#[serde(default)]
pub positions: Vec<IntxPosition>,
#[serde(default)]
pub summary: Option<IntxSummary>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct GetPerpetualsPositionResponse {
pub position: IntxPosition,
}
#[derive(Debug, Clone, Deserialize)]
pub struct IntxPortfolioBalance {
#[serde(default)]
pub asset: Option<String>,
#[serde(default)]
pub quantity: Option<String>,
#[serde(default)]
pub hold: Option<String>,
#[serde(default)]
pub transfer_hold: Option<String>,
#[serde(default)]
pub collateral_value: Option<String>,
#[serde(default)]
pub max_withdraw_amount: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct GetPortfolioBalancesResponse {
#[serde(default)]
pub portfolio_balances: Vec<IntxPortfolioBalance>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct IntxPortfolioSummary {
#[serde(default)]
pub unrealized_pnl: Option<IntxAmount>,
#[serde(default)]
pub buying_power: Option<IntxAmount>,
#[serde(default)]
pub total_balance: Option<IntxAmount>,
#[serde(default)]
pub max_withdrawal_amount: Option<IntxAmount>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct GetPerpetualsPortfolioSummaryResponse {
pub summary: IntxPortfolioSummary,
}
#[derive(Debug, Clone, Serialize)]
pub struct AllocatePortfolioRequest {
pub portfolio_uuid: String,
pub symbol: String,
pub amount: String,
pub currency: String,
}
impl AllocatePortfolioRequest {
pub fn new(
portfolio_uuid: impl Into<String>,
symbol: impl Into<String>,
amount: impl Into<String>,
currency: impl Into<String>,
) -> Self {
Self {
portfolio_uuid: portfolio_uuid.into(),
symbol: symbol.into(),
amount: amount.into(),
currency: currency.into(),
}
}
}
#[derive(Debug, Clone, Serialize)]
pub struct SetMultiAssetCollateralRequest {
pub multi_asset_collateral_enabled: bool,
}
impl SetMultiAssetCollateralRequest {
pub fn new(enabled: bool) -> Self {
Self {
multi_asset_collateral_enabled: enabled,
}
}
}