use log::debug;
use crate::market_data::historical::TickDecoder;
use crate::messages::Notice;
use crate::subscriptions::common::RoutedItem;
use crate::Error;
pub(crate) enum TickAction<T> {
Batch(Vec<T>, bool),
Skip,
Notice(Notice),
EndOfStream,
Error(Error),
}
pub(crate) fn classify<T: TickDecoder<T>>(item: RoutedItem) -> TickAction<T> {
match item {
RoutedItem::Response(message) if message.message_type() == T::MESSAGE_TYPE => match T::decode(&message) {
Ok((ticks, done)) => TickAction::Batch(ticks, done),
Err(e) => TickAction::Error(e),
},
RoutedItem::Response(message) => {
debug!("unexpected message on historical-ticks channel: {message:?}");
TickAction::Skip
}
RoutedItem::Notice(notice) => TickAction::Notice(notice),
RoutedItem::Error(Error::EndOfStream) => TickAction::EndOfStream,
RoutedItem::Error(e) => TickAction::Error(e),
}
}
#[cfg(test)]
#[path = "tick_tests.rs"]
mod tests;