use super::{order::Order, order_side::OrderSide};
use std::collections::VecDeque;
#[derive(Debug, Clone)]
pub struct OrderBook {
pub bids: VecDeque<Order>,
pub asks: VecDeque<Order>,
}
impl Default for OrderBook {
fn default() -> Self {
Self::new()
}
}
impl OrderBook {
#[must_use]
pub const fn new() -> Self {
Self {
bids: VecDeque::new(),
asks: VecDeque::new(),
}
}
pub fn insert_order(&mut self, order: Order) {
match order.order_side {
OrderSide::BID => self.bids.push_back(order),
OrderSide::ASK => self.asks.push_back(order),
}
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.bids.is_empty() && self.asks.is_empty()
}
#[must_use]
pub fn len(&self) -> usize {
self.bids.len() + self.asks.len()
}
}