use crate::{
instrument::{InstrumentData, InstrumentSpec, InstrumentTicker},
order::{DeferredOrderActions, StateGoal},
order_manager::{OrderManager, OrdersCapacitySpec},
strategy::Strategy, timestamp::TradeTimestamp, volume::DirectionalExposure,
};
use super::{OrderIdGenerator, OrdersBackend};
pub(crate) trait RealtimeDataBackend<
'instrument_data,
'aggregated_data,
IS: InstrumentSpec,
OB: OrdersBackend<IS>,
OrdersCS: OrdersCapacitySpec,
S: Strategy<IS, OB, OrdersCS> + Send,
> {
fn initialize_realtime(
&mut self,
instrument_ticker: &InstrumentTicker,
recent_trade_timestamp: Option<&TradeTimestamp>,
) -> impl Future<Output = ()>;
fn poll_realtime(
&mut self,
instrument_data: &'instrument_data mut InstrumentData<
'instrument_data,
'aggregated_data,
IS,
>,
strategy: &mut S,
order_manager: &OrderManager<IS, OrdersCS>,
directional_exposure: &DirectionalExposure<IS>,
state_goal: &mut StateGoal,
deferred_order_actions: &mut DeferredOrderActions<IS>,
order_id_generator: &mut OrderIdGenerator,
recent_trade_timestamp: Option<&TradeTimestamp>,
) -> impl Future<Output = ()>;
}