use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct StreamStatus {
pub status: String,
#[serde(default)]
pub message: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct StreamQuote {
pub symbol: Option<String>,
pub last: Option<String>,
pub ask: Option<String>,
pub bid: Option<String>,
pub volume: Option<String>,
#[serde(default)]
pub trade_time: Option<String>,
#[serde(default)]
pub status: Option<String>,
}
impl StreamQuote {
pub fn is_status(&self) -> bool {
self.status.is_some()
}
pub fn is_go_away(&self) -> bool {
self.status.as_deref() == Some("GoAway")
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct StreamBar {
pub high: Option<String>,
pub low: Option<String>,
pub open: Option<String>,
pub close: Option<String>,
pub time_stamp: Option<String>,
pub total_volume: Option<String>,
#[serde(default)]
pub status: Option<String>,
#[serde(default)]
pub bar_status: Option<String>,
}
impl StreamBar {
pub fn is_status(&self) -> bool {
self.status.is_some()
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct StreamMarketDepthQuote {
pub symbol: Option<String>,
pub ask: Option<String>,
pub ask_size: Option<String>,
pub bid: Option<String>,
pub bid_size: Option<String>,
#[serde(default)]
pub side: Option<String>,
#[serde(default)]
pub status: Option<String>,
}
impl StreamMarketDepthQuote {
pub fn is_status(&self) -> bool {
self.status.is_some()
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct StreamMarketDepthAggregate {
pub symbol: Option<String>,
pub total_ask_size: Option<String>,
pub total_bid_size: Option<String>,
#[serde(default)]
pub levels: Option<u32>,
#[serde(default)]
pub status: Option<String>,
}
impl StreamMarketDepthAggregate {
pub fn is_status(&self) -> bool {
self.status.is_some()
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct StreamOptionChain {
pub symbol: Option<String>,
pub underlying: Option<String>,
#[serde(default, rename = "Type")]
pub option_type: Option<String>,
pub strike_price: Option<String>,
pub expiration_date: Option<String>,
pub bid: Option<String>,
pub ask: Option<String>,
pub last: Option<String>,
#[serde(default)]
pub status: Option<String>,
}
impl StreamOptionChain {
pub fn is_status(&self) -> bool {
self.status.is_some()
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct StreamOptionQuote {
pub symbol: Option<String>,
pub bid: Option<String>,
pub ask: Option<String>,
pub last: Option<String>,
pub volume: Option<String>,
#[serde(default)]
pub open_interest: Option<String>,
#[serde(default)]
pub status: Option<String>,
}
impl StreamOptionQuote {
pub fn is_status(&self) -> bool {
self.status.is_some()
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct StreamOrder {
pub order_id: Option<String>,
pub account_id: Option<String>,
pub symbol: Option<String>,
pub quantity: Option<String>,
pub order_type: Option<String>,
#[serde(default)]
pub order_status: Option<String>,
#[serde(default)]
pub filled_quantity: Option<String>,
#[serde(default)]
pub status: Option<String>,
}
impl StreamOrder {
pub fn is_status(&self) -> bool {
self.status.is_some()
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct StreamPosition {
pub account_id: Option<String>,
pub symbol: Option<String>,
pub quantity: Option<String>,
pub average_price: Option<String>,
pub last: Option<String>,
#[serde(default)]
pub unrealized_profit_loss: Option<String>,
#[serde(default)]
pub status: Option<String>,
}
impl StreamPosition {
pub fn is_status(&self) -> bool {
self.status.is_some()
}
}