Crate barter_data
source ·Expand description
Barter-Data
A high-performance WebSocket integration library for streaming public market data from leading cryptocurrency exchanges - batteries included. It is:
- Easy: Barter-Data’s simple
StreamBuilderinterface allows for easy & quick setup (see example below!). - Normalised: Barter-Data’s unified interface for consuming public WebSocket data means every Exchange returns a normalised data model.
- Real-Time: Barter-Data utilises real-time WebSocket integrations enabling the consumption of normalised tick-by-tick data.
- Extensible: Barter-Data is highly extensible, and therefore easy to contribute to with coding new integrations!
User API
StreamBuilderfor initialisingMarketStreams of various kinds.- Define what exchange market data you want to stream using the
Subscriptiontype. - Pass
Subscriptions to theStreamBuilder::subscribemethod. - Each call to the
StreamBuilder::subscribemethod opens a new WebSocket connection to the exchange - giving you full control. - Call
StreamBuilder::initto start streaming!
Examples
For a comprehensive collection of examples, see the /examples directory.
Multi Exchange Public Trades
use barter_data::exchange::gateio::spot::GateioSpot;
use barter_data::{
exchange::{
binance::{futures::BinanceFuturesUsd, spot::BinanceSpot},
coinbase::Coinbase,
okx::Okx,
},
streams::Streams,
subscription::trade::PublicTrades,
};
use barter_integration::model::instrument::kind::InstrumentKind;
use futures::StreamExt;
#[tokio::main]
async fn main() {
// Initialise PublicTrades Streams for various exchanges
// '--> each call to StreamBuilder::subscribe() initialises a separate WebSocket connection
let streams = Streams::<PublicTrades>::builder()
.subscribe([
(BinanceSpot::default(), "btc", "usdt", InstrumentKind::Spot, PublicTrades),
(BinanceSpot::default(), "eth", "usdt", InstrumentKind::Spot, PublicTrades),
])
.subscribe([
(BinanceFuturesUsd::default(), "btc", "usdt", InstrumentKind::Perpetual, PublicTrades),
(BinanceFuturesUsd::default(), "eth", "usdt", InstrumentKind::Perpetual, PublicTrades),
])
.subscribe([
(Coinbase, "btc", "usd", InstrumentKind::Spot, PublicTrades),
(Coinbase, "eth", "usd", InstrumentKind::Spot, PublicTrades),
])
.subscribe([
(GateioSpot::default(), "btc", "usdt", InstrumentKind::Spot, PublicTrades),
(GateioSpot::default(), "eth", "usdt", InstrumentKind::Spot, PublicTrades),
])
.subscribe([
(Okx, "btc", "usdt", InstrumentKind::Spot, PublicTrades),
(Okx, "eth", "usdt", InstrumentKind::Spot, PublicTrades),
(Okx, "btc", "usdt", InstrumentKind::Perpetual, PublicTrades),
(Okx, "eth", "usdt", InstrumentKind::Perpetual, PublicTrades),
])
.init()
.await
.unwrap();
// Join all exchange PublicTrades streams into a single tokio_stream::StreamMap
// Notes:
// - Use `streams.select(ExchangeId)` to interact with the individual exchange streams!
// - Use `streams.join()` to join all exchange streams into a single mpsc::UnboundedReceiver!
let mut joined_stream = streams.join_map().await;
while let Some((exchange, trade)) = joined_stream.next().await {
println!("Exchange: {exchange}, Market<PublicTrade>: {trade:?}");
}
}Modules
- All
Errors generated in Barter-Data. - Defines the generic
MarketEvent<T>used in everyMarketStream. Connectorimplementations for each exchange.- High-level API types used for building
MarketStreams from collections of BarterSubscriptions. Subscriber,SubscriptionMapperandSubscriptionValidatortraits that define how aConnectorwill subscribe to exchangeMarketStreams.- Types that communicate the type of each
MarketStreamto initialise, and what normalised Barter output type the exchange will be transformed into. - Generic
ExchangeTransformerimplementations used byMarketStreams to translate exchange specific types to normalised Barter types.
Traits
- Defines a generic identification type for the implementor.
- [
Stream] that yieldsMarket<Kind>events. The type ofMarket<Kind>depends on the providedSubKindof the passedSubscriptions.
Functions
- Schedule the sending of custom application-level ping
WsMessages to the exchange using the providedPingInterval.
Type Definitions
- Convenient type alias for an
ExchangeStreamutilising a tungsteniteWebSocket.