use crate::{
instrument::{InstrumentData, InstrumentSpec, InstrumentTicker},
order::{ActiveOrderGoals, ActiveStateGoal, DeferredOrderActions},
order_manager::{OrderManager, OrdersCapacitySpec},
strategy::Strategy,
timestamp::TradeTimestamp,
volume::DirectionalExposure,
};
use super::{OrderIdGenerator, OrdersBackend};
pub(crate) trait RealtimeDataBackend<
IS: InstrumentSpec + Send,
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<'instrument_data, 'aggregated_data>(
&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>,
active_order_goals: &ActiveOrderGoals<IS>,
active_state_goal: &ActiveStateGoal,
deferred_order_actions: &mut DeferredOrderActions<IS>,
order_id_generator: &mut OrderIdGenerator,
recent_trade_timestamp: Option<&TradeTimestamp>,
) -> impl Future<Output = ()>;
}