use crate::{OrderId, PegLevel, PegReference, RestingPeggedOrder, Timestamp};
use std::{cmp::Reverse, collections::BinaryHeap};
use rustc_hash::FxHashMap;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, Default)]
pub struct PeggedBook {
pub(crate) orders: FxHashMap<OrderId, RestingPeggedOrder>,
pub(crate) bid_levels: [PegLevel; PegReference::COUNT],
pub(crate) ask_levels: [PegLevel; PegReference::COUNT],
pub(crate) expiration_queue: BinaryHeap<Reverse<(Timestamp, OrderId)>>,
}
impl PeggedBook {
pub fn new() -> Self {
Self::default()
}
pub fn orders(&self) -> &FxHashMap<OrderId, RestingPeggedOrder> {
&self.orders
}
pub fn bid_levels(&self) -> &[PegLevel; PegReference::COUNT] {
&self.bid_levels
}
pub fn ask_levels(&self) -> &[PegLevel; PegReference::COUNT] {
&self.ask_levels
}
pub fn expiration_queue(&self) -> &BinaryHeap<Reverse<(Timestamp, OrderId)>> {
&self.expiration_queue
}
}