use crate::{
funding::FundingRate, liquidations::Liquidation, open_interest::OpenInterest,
orderbooks::Orderbook, trades::Trade,
};
#[derive(Debug, Clone)]
pub struct MarketSnapshot {
pub ts_ns: u64,
pub orderbook: Option<Orderbook>,
pub trades: Vec<Trade>,
pub liquidations: Vec<Liquidation>,
pub funding_rate: Vec<FundingRate>,
pub open_interest: Vec<OpenInterest>,
}
impl MarketSnapshot {
pub fn empty(ts_ns: u64) -> Self {
Self {
ts_ns,
orderbook: None,
trades: Vec::new(),
liquidations: Vec::new(),
funding_rate: Vec::new(),
open_interest: Vec::new(),
}
}
pub fn has_data(&self) -> bool {
self.orderbook.is_some()
|| !self.trades.is_empty()
|| !self.liquidations.is_empty()
|| !self.funding_rate.is_empty()
|| !self.open_interest.is_empty()
}
pub fn trade_volume(&self) -> f64 {
self.trades.iter().map(|t| t.amount).sum()
}
pub fn trade_count(&self) -> usize {
self.trades.len()
}
pub fn liquidation_notional(&self) -> f64 {
self.liquidations.iter().map(|l| l.price * l.amount).sum()
}
}