use crate::{
instrument::{InstrumentData, InstrumentSpec},
aggregation::TradeTradeTimestamp, timestamp::TradeTimestamped,
};
pub struct StdTrades<
'instrument_data,
IS: InstrumentSpec,
> {
data: &'instrument_data [TradeTradeTimestamp<IS>],
}
impl<
'instrument_data,
IS: InstrumentSpec,
> StdTrades<'instrument_data, IS> {
pub fn new(
data: &'instrument_data [TradeTradeTimestamp<IS>],
) -> Self {
Self { data }
}
pub fn new_reaggregate<T: TradeTimestamped + 'instrument_data>(
instrument_data: &'instrument_data InstrumentData<'instrument_data, '_, IS>,
recent_aggregated_data_backward: impl Iterator<Item = &'instrument_data T>,
count: usize,
) -> Self {
debug_assert!(count >= 1);
let Some(
aggregation,
) = recent_aggregated_data_backward.skip(
count - 1,
).next() else {
return Self {
data: instrument_data.trades_forward_slice(),
};
};
Self {
data: instrument_data.reaggregate_trade_forward_slice(aggregation),
}
}
pub fn new_aggregate<T: TradeTimestamped + 'instrument_data>(
instrument_data: &'instrument_data InstrumentData<'instrument_data, '_, IS>,
) -> Self {
Self {
data: instrument_data.trades_new_recent_forward_slice(),
}
}
pub fn into_iter(
self,
) -> impl IntoIterator<Item = &'instrument_data TradeTradeTimestamp<IS>> {
self.data
}
pub fn iter(
&self,
) -> impl Iterator<Item = &'instrument_data TradeTradeTimestamp<IS>> {
self.data.iter()
}
}