use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub struct PositionData {
#[serde(rename = "positionIdx")]
#[serde(default)]
pub position_idx: Option<i32>,
#[serde(rename = "riskId")]
#[serde(default)]
pub risk_id: Option<i32>,
#[serde(rename = "symbol")]
#[serde(default)]
pub symbol: Option<String>,
#[serde(rename = "side")]
#[serde(default)]
pub side: Option<String>,
#[serde(rename = "size")]
#[serde(default)]
pub size: Option<String>,
#[serde(rename = "positionValue")]
#[serde(default)]
pub position_value: Option<String>,
#[serde(rename = "entryPrice")]
#[serde(default)]
pub entry_price: Option<String>,
#[serde(rename = "tradeMode")]
#[serde(default)]
pub trade_mode: Option<i32>,
#[serde(rename = "autoAddMargin")]
#[serde(default)]
pub auto_add_margin: Option<i32>,
#[serde(rename = "leverage")]
#[serde(default)]
pub leverage: Option<String>,
#[serde(rename = "positionStatus")]
#[serde(default)]
pub position_status: Option<String>,
#[serde(rename = "markPrice")]
#[serde(default)]
pub mark_price: Option<String>,
#[serde(rename = "liqPrice")]
#[serde(default)]
pub liq_price: Option<String>,
#[serde(rename = "bustPrice")]
#[serde(default)]
pub bust_price: Option<String>,
#[serde(rename = "unrealisedPnl")]
#[serde(default)]
pub unrealised_pnl: Option<String>,
#[serde(rename = "cumRealisedPnl")]
#[serde(default)]
pub cum_realised_pnl: Option<String>,
#[serde(rename = "takeProfit")]
#[serde(default)]
pub take_profit: Option<String>,
#[serde(rename = "stopLoss")]
#[serde(default)]
pub stop_loss: Option<String>,
#[serde(rename = "trailingStop")]
#[serde(default)]
pub trailing_stop: Option<String>,
#[serde(rename = "positionIM")]
#[serde(default)]
pub position_im: Option<String>,
#[serde(rename = "positionMM")]
#[serde(default)]
pub position_mm: Option<String>,
#[serde(rename = "createdTime")]
#[serde(default)]
pub created_time: Option<String>,
#[serde(rename = "updatedTime")]
#[serde(default)]
pub updated_time: Option<String>,
#[serde(rename = "category")]
#[serde(default)]
pub category: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_parse_position() {
let json = serde_json::json!({
"positionIdx": 0,
"symbol": "BTCUSDT",
"side": "Buy",
"size": "0.5",
"entryPrice": "50000.00",
"markPrice": "50100.00",
"unrealisedPnl": "50.00",
"leverage": "10",
"category": "linear"
});
let pos: PositionData = serde_json::from_value(json).unwrap();
assert_eq!(pos.symbol.as_deref(), Some("BTCUSDT"));
assert_eq!(pos.side.as_deref(), Some("Buy"));
assert_eq!(pos.size.as_deref(), Some("0.5"));
}
}