use crate::{
packed_value, pool,
protocol::{
limits::Limit,
orderflow::{AberrantFill, FillId, Halt, NormalFill, Order, OrderId, OrderState},
},
};
use enumflags2::BitFlags;
use netidx::{chars::Chars, pool::Pooled};
use netidx_derive::Pack;
use std::{ops::Deref, result, sync::Arc};
pool!(pub, pool_oids_fids, Vec<(OrderId, FillId)>, 1_000, 1_000);
pool!(pub, pool_fids, Vec<FillId>, 1_000, 1_000);
pool!(pub, pool_fills, Vec<result::Result<NormalFill, AberrantFill>>, 1_000, 1_000);
pool!(pub, pool_orders, Vec<Order>, 1_000, 1_000);
pool!(pub, pool_order_state, Vec<BitFlags<OrderState>>, 1_000, 10_000);
pool!(pub, pool_oids, Vec<OrderId>, 1_000, 10_000);
#[derive(Debug, Clone, PartialEq, Eq, Pack)]
#[pack(unwrapped)]
pub struct OrderIds(pub Arc<Pooled<Vec<OrderId>>>);
packed_value!(OrderIds);
impl Deref for OrderIds {
type Target = Pooled<Vec<OrderId>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq, Pack)]
#[pack(unwrapped)]
pub struct FillIds(pub Arc<Pooled<Vec<FillId>>>);
packed_value!(FillIds);
impl Deref for FillIds {
type Target = Pooled<Vec<FillId>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq, Pack)]
#[pack(unwrapped)]
pub struct OidsAndFillids(pub Arc<Pooled<Vec<(OrderId, FillId)>>>);
packed_value!(OidsAndFillids);
impl Deref for OidsAndFillids {
type Target = Pooled<Vec<(OrderId, FillId)>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq, Pack)]
#[pack(unwrapped)]
pub struct OrderStates(pub Arc<Pooled<Vec<BitFlags<OrderState>>>>);
packed_value!(OrderStates);
impl Deref for OrderStates {
type Target = Pooled<Vec<BitFlags<OrderState>>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq, Pack)]
#[pack(unwrapped)]
pub struct RejectReasons(pub Arc<Pooled<Vec<Option<Chars>>>>);
packed_value!(RejectReasons);
impl Deref for RejectReasons {
type Target = Pooled<Vec<Option<Chars>>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq, Pack)]
#[pack(unwrapped)]
pub struct Orders(pub Arc<Pooled<Vec<Order>>>);
packed_value!(Orders);
impl Deref for Orders {
type Target = Pooled<Vec<Order>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq, Pack)]
#[pack(unwrapped)]
pub struct Fills(pub Arc<Pooled<Vec<result::Result<NormalFill, AberrantFill>>>>);
packed_value!(Fills);
impl Deref for Fills {
type Target = Pooled<Vec<result::Result<NormalFill, AberrantFill>>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq, Pack)]
#[pack(unwrapped)]
pub struct Limits(pub Arc<Pooled<Vec<Limit>>>);
packed_value!(Limits);
impl Deref for Limits {
type Target = Pooled<Vec<Limit>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[derive(Debug, Clone, PartialEq, Eq, Pack)]
#[pack(unwrapped)]
pub struct Halts(pub Arc<Pooled<Vec<Halt>>>);
packed_value!(Halts);
impl Deref for Halts {
type Target = Pooled<Vec<Halt>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}