use crate::contracts::Contract;
use crate::market_data::realtime::{BidAsk, MidPoint, Trade};
use crate::market_data::IgnoreSize;
use crate::Error;
#[cfg(test)]
#[path = "tick_by_tick_tests.rs"]
mod tests;
#[must_use = "TickByTickBuilder does nothing until you call .last(), .all_last(), .bid_ask(...), or .mid_point()"]
pub struct TickByTickBuilder<'a, C> {
client: &'a C,
contract: &'a Contract,
number_of_ticks: i32,
}
impl<'a, C> TickByTickBuilder<'a, C> {
pub(crate) fn new(client: &'a C, contract: &'a Contract, number_of_ticks: i32) -> Self {
Self {
client,
contract,
number_of_ticks,
}
}
}
#[cfg(feature = "sync")]
impl<'a> TickByTickBuilder<'a, crate::client::sync::Client> {
pub fn last(self) -> Result<crate::subscriptions::sync::Subscription<Trade>, Error> {
crate::market_data::realtime::sync::tick_by_tick::<Trade>(self.client, self.contract, "Last", self.number_of_ticks, false)
}
pub fn all_last(self) -> Result<crate::subscriptions::sync::Subscription<Trade>, Error> {
crate::market_data::realtime::sync::tick_by_tick::<Trade>(self.client, self.contract, "AllLast", self.number_of_ticks, false)
}
pub fn bid_ask(self, ignore_size: IgnoreSize) -> Result<crate::subscriptions::sync::Subscription<BidAsk>, Error> {
crate::market_data::realtime::sync::tick_by_tick::<BidAsk>(
self.client,
self.contract,
"BidAsk",
self.number_of_ticks,
matches!(ignore_size, IgnoreSize::Yes),
)
}
pub fn mid_point(self) -> Result<crate::subscriptions::sync::Subscription<MidPoint>, Error> {
crate::market_data::realtime::sync::tick_by_tick::<MidPoint>(self.client, self.contract, "MidPoint", self.number_of_ticks, false)
}
}
#[cfg(feature = "async")]
impl<'a> TickByTickBuilder<'a, crate::client::r#async::Client> {
pub async fn last(self) -> Result<crate::subscriptions::Subscription<Trade>, Error> {
crate::market_data::realtime::r#async::tick_by_tick::<Trade>(self.client, self.contract, "Last", self.number_of_ticks, false).await
}
pub async fn all_last(self) -> Result<crate::subscriptions::Subscription<Trade>, Error> {
crate::market_data::realtime::r#async::tick_by_tick::<Trade>(self.client, self.contract, "AllLast", self.number_of_ticks, false).await
}
pub async fn bid_ask(self, ignore_size: IgnoreSize) -> Result<crate::subscriptions::Subscription<BidAsk>, Error> {
crate::market_data::realtime::r#async::tick_by_tick::<BidAsk>(
self.client,
self.contract,
"BidAsk",
self.number_of_ticks,
matches!(ignore_size, IgnoreSize::Yes),
)
.await
}
pub async fn mid_point(self) -> Result<crate::subscriptions::Subscription<MidPoint>, Error> {
crate::market_data::realtime::r#async::tick_by_tick::<MidPoint>(self.client, self.contract, "MidPoint", self.number_of_ticks, false).await
}
}