pub struct DynamicStreams<InstrumentKey> {
pub trades: VecMap<ExchangeId, UnboundedReceiverStream<MarketStreamResult<InstrumentKey, PublicTrade>>>,
pub l1s: VecMap<ExchangeId, UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookL1>>>,
pub l2s: VecMap<ExchangeId, UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookEvent>>>,
pub liquidations: VecMap<ExchangeId, UnboundedReceiverStream<MarketStreamResult<InstrumentKey, Liquidation>>>,
}Fields§
§trades: VecMap<ExchangeId, UnboundedReceiverStream<MarketStreamResult<InstrumentKey, PublicTrade>>>§l1s: VecMap<ExchangeId, UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookL1>>>§l2s: VecMap<ExchangeId, UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookEvent>>>§liquidations: VecMap<ExchangeId, UnboundedReceiverStream<MarketStreamResult<InstrumentKey, Liquidation>>>Implementations§
Source§impl<InstrumentKey> DynamicStreams<InstrumentKey>
impl<InstrumentKey> DynamicStreams<InstrumentKey>
Sourcepub async fn init<SubBatchIter, SubIter, Sub, Instrument>(
subscription_batches: SubBatchIter,
) -> Result<Self, DataError>where
SubBatchIter: IntoIterator<Item = SubIter>,
SubIter: IntoIterator<Item = Sub>,
Sub: Into<Subscription<ExchangeId, Instrument, SubKind>>,
Instrument: InstrumentData<Key = InstrumentKey> + Ord + Display + 'static,
InstrumentKey: Debug + Clone + Send + 'static,
Subscription<BinanceSpot, Instrument, PublicTrades>: Identifier<BinanceMarket>,
Subscription<BinanceSpot, Instrument, OrderBooksL1>: Identifier<BinanceMarket>,
Subscription<BinanceSpot, Instrument, OrderBooksL2>: Identifier<BinanceMarket>,
Subscription<BinanceFuturesUsd, Instrument, PublicTrades>: Identifier<BinanceMarket>,
Subscription<BinanceFuturesUsd, Instrument, OrderBooksL1>: Identifier<BinanceMarket>,
Subscription<BinanceFuturesUsd, Instrument, OrderBooksL2>: Identifier<BinanceMarket>,
Subscription<BinanceFuturesUsd, Instrument, Liquidations>: Identifier<BinanceMarket>,
Subscription<Bitfinex, Instrument, PublicTrades>: Identifier<BitfinexMarket>,
Subscription<Bitmex, Instrument, PublicTrades>: Identifier<BitmexMarket>,
Subscription<BybitSpot, Instrument, PublicTrades>: Identifier<BybitMarket>,
Subscription<BybitSpot, Instrument, OrderBooksL1>: Identifier<BybitMarket>,
Subscription<BybitSpot, Instrument, OrderBooksL2>: Identifier<BybitMarket>,
Subscription<BybitPerpetualsUsd, Instrument, PublicTrades>: Identifier<BybitMarket>,
Subscription<BybitPerpetualsUsd, Instrument, OrderBooksL1>: Identifier<BybitMarket>,
Subscription<BybitPerpetualsUsd, Instrument, OrderBooksL2>: Identifier<BybitMarket>,
Subscription<Coinbase, Instrument, PublicTrades>: Identifier<CoinbaseMarket>,
Subscription<GateioSpot, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<GateioFuturesUsd, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<GateioFuturesBtc, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<GateioPerpetualsUsd, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<GateioPerpetualsBtc, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<GateioOptions, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<Kraken, Instrument, PublicTrades>: Identifier<KrakenMarket>,
Subscription<Kraken, Instrument, OrderBooksL1>: Identifier<KrakenMarket>,
Subscription<Okx, Instrument, PublicTrades>: Identifier<OkxMarket>,
pub async fn init<SubBatchIter, SubIter, Sub, Instrument>(
subscription_batches: SubBatchIter,
) -> Result<Self, DataError>where
SubBatchIter: IntoIterator<Item = SubIter>,
SubIter: IntoIterator<Item = Sub>,
Sub: Into<Subscription<ExchangeId, Instrument, SubKind>>,
Instrument: InstrumentData<Key = InstrumentKey> + Ord + Display + 'static,
InstrumentKey: Debug + Clone + Send + 'static,
Subscription<BinanceSpot, Instrument, PublicTrades>: Identifier<BinanceMarket>,
Subscription<BinanceSpot, Instrument, OrderBooksL1>: Identifier<BinanceMarket>,
Subscription<BinanceSpot, Instrument, OrderBooksL2>: Identifier<BinanceMarket>,
Subscription<BinanceFuturesUsd, Instrument, PublicTrades>: Identifier<BinanceMarket>,
Subscription<BinanceFuturesUsd, Instrument, OrderBooksL1>: Identifier<BinanceMarket>,
Subscription<BinanceFuturesUsd, Instrument, OrderBooksL2>: Identifier<BinanceMarket>,
Subscription<BinanceFuturesUsd, Instrument, Liquidations>: Identifier<BinanceMarket>,
Subscription<Bitfinex, Instrument, PublicTrades>: Identifier<BitfinexMarket>,
Subscription<Bitmex, Instrument, PublicTrades>: Identifier<BitmexMarket>,
Subscription<BybitSpot, Instrument, PublicTrades>: Identifier<BybitMarket>,
Subscription<BybitSpot, Instrument, OrderBooksL1>: Identifier<BybitMarket>,
Subscription<BybitSpot, Instrument, OrderBooksL2>: Identifier<BybitMarket>,
Subscription<BybitPerpetualsUsd, Instrument, PublicTrades>: Identifier<BybitMarket>,
Subscription<BybitPerpetualsUsd, Instrument, OrderBooksL1>: Identifier<BybitMarket>,
Subscription<BybitPerpetualsUsd, Instrument, OrderBooksL2>: Identifier<BybitMarket>,
Subscription<Coinbase, Instrument, PublicTrades>: Identifier<CoinbaseMarket>,
Subscription<GateioSpot, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<GateioFuturesUsd, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<GateioFuturesBtc, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<GateioPerpetualsUsd, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<GateioPerpetualsBtc, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<GateioOptions, Instrument, PublicTrades>: Identifier<GateioMarket>,
Subscription<Kraken, Instrument, PublicTrades>: Identifier<KrakenMarket>,
Subscription<Kraken, Instrument, OrderBooksL1>: Identifier<KrakenMarket>,
Subscription<Okx, Instrument, PublicTrades>: Identifier<OkxMarket>,
Initialise a set of Streams by providing one or more Subscription batches.
Each batch (ie/ impl Iterator<Item = Subscription>) will initialise at-least-one
WebSocket Stream under the hood. If the batch contains more-than-one ExchangeId and/or
SubKind, it will be further split under the hood for compile-time reasons.
§Examples
Please see barter-data-rs/examples/dynamic_multi_stream_multi_exchange.rs for a comprehensive example of how to use this market data stream initialiser.
Sourcepub fn select_trades(
&mut self,
exchange: ExchangeId,
) -> Option<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, PublicTrade>>>
pub fn select_trades( &mut self, exchange: ExchangeId, ) -> Option<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, PublicTrade>>>
Remove an exchange PublicTrade Stream from the DynamicStreams collection.
Note that calling this method will permanently remove this Stream from Self.
Sourcepub fn select_all_trades(
&mut self,
) -> SelectAll<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, PublicTrade>>>
pub fn select_all_trades( &mut self, ) -> SelectAll<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, PublicTrade>>>
Select and merge every exchange PublicTrade Stream using
SelectAll.
Sourcepub fn select_l1s(
&mut self,
exchange: ExchangeId,
) -> Option<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookL1>>>
pub fn select_l1s( &mut self, exchange: ExchangeId, ) -> Option<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookL1>>>
Remove an exchange OrderBookL1 Stream from the DynamicStreams collection.
Note that calling this method will permanently remove this Stream from Self.
Sourcepub fn select_all_l1s(
&mut self,
) -> SelectAll<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookL1>>>
pub fn select_all_l1s( &mut self, ) -> SelectAll<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookL1>>>
Select and merge every exchange OrderBookL1 Stream using
SelectAll.
Sourcepub fn select_l2s(
&mut self,
exchange: ExchangeId,
) -> Option<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookEvent>>>
pub fn select_l2s( &mut self, exchange: ExchangeId, ) -> Option<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookEvent>>>
Remove an exchange OrderBookEvent Stream from the DynamicStreams collection.
Note that calling this method will permanently remove this Stream from Self.
Sourcepub fn select_all_l2s(
&mut self,
) -> SelectAll<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookEvent>>>
pub fn select_all_l2s( &mut self, ) -> SelectAll<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, OrderBookEvent>>>
Select and merge every exchange OrderBookEvent Stream using
SelectAll.
Sourcepub fn select_liquidations(
&mut self,
exchange: ExchangeId,
) -> Option<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, Liquidation>>>
pub fn select_liquidations( &mut self, exchange: ExchangeId, ) -> Option<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, Liquidation>>>
Remove an exchange Liquidation Stream from the DynamicStreams collection.
Note that calling this method will permanently remove this Stream from Self.
Sourcepub fn select_all_liquidations(
&mut self,
) -> SelectAll<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, Liquidation>>>
pub fn select_all_liquidations( &mut self, ) -> SelectAll<UnboundedReceiverStream<MarketStreamResult<InstrumentKey, Liquidation>>>
Select and merge every exchange Liquidation Stream using
SelectAll.
Sourcepub fn select_all<Output>(self) -> impl Stream<Item = Output>where
InstrumentKey: Send + 'static,
Output: 'static,
MarketStreamResult<InstrumentKey, PublicTrade>: Into<Output>,
MarketStreamResult<InstrumentKey, OrderBookL1>: Into<Output>,
MarketStreamResult<InstrumentKey, OrderBookEvent>: Into<Output>,
MarketStreamResult<InstrumentKey, Liquidation>: Into<Output>,
pub fn select_all<Output>(self) -> impl Stream<Item = Output>where
InstrumentKey: Send + 'static,
Output: 'static,
MarketStreamResult<InstrumentKey, PublicTrade>: Into<Output>,
MarketStreamResult<InstrumentKey, OrderBookL1>: Into<Output>,
MarketStreamResult<InstrumentKey, OrderBookEvent>: Into<Output>,
MarketStreamResult<InstrumentKey, Liquidation>: Into<Output>,
Select and merge every exchange Stream for every data type using select_all
Note that using MarketStreamResult<Instrument, DataKind> as the Output is suitable for most
use cases.
Trait Implementations§
Auto Trait Implementations§
impl<InstrumentKey> Freeze for DynamicStreams<InstrumentKey>
impl<InstrumentKey> RefUnwindSafe for DynamicStreams<InstrumentKey>
impl<InstrumentKey> Send for DynamicStreams<InstrumentKey>where
InstrumentKey: Send,
impl<InstrumentKey> Sync for DynamicStreams<InstrumentKey>where
InstrumentKey: Send,
impl<InstrumentKey> Unpin for DynamicStreams<InstrumentKey>
impl<InstrumentKey> UnwindSafe for DynamicStreams<InstrumentKey>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more