Skip to main content

md_query/
md_query.rs

1//! Example: Listen to ticker and L2 order book updates.
2//!
3//! ```bash
4//! cargo run --example md_listener -- \
5//!     --url wss://exchange-wss.bulk.trade \
6//!     --symbols BTC-USD,ETH-USD
7//! ```
8
9use bulk_client::api::parts::HttpConfig;
10use bulk_client::api::BulkHttpClient;
11use clap::Parser;
12use std::process;
13use tracing::info;
14use tracing_subscriber::EnvFilter;
15
16#[derive(Parser, Debug)]
17#[command(name = "md_query", about = "Query MD")]
18struct Args {
19    /// WebSocket URL
20    #[arg(long, default_value = "https://exchange-api2.bulk.trade/api/v1")]
21    url: String,
22
23    /// symbol to query
24    #[arg(long, default_value = "BTC-USD")]
25    symbol: String,
26}
27
28#[tokio::main]
29async fn main() -> eyre::Result<()> {
30    tracing_subscriber::fmt()
31        .with_env_filter(EnvFilter::from_default_env().add_directive(tracing::Level::INFO.into()))
32        .init();
33
34    let args = Args::parse();
35
36    info!("Connecting to {} for symbol: {:?}", args.url, args.symbol);
37    let client = BulkHttpClient::new(&HttpConfig {
38        base_url: args.url,
39        signer: None,
40        ..Default::default()
41    })
42    .unwrap();
43
44    let book = client.get_orderbook(&args.symbol, None, None).await?;
45    eprintln!("book: {:?}\n", book);
46
47    let ticker = client.get_ticker(&args.symbol).await?;
48    eprintln!("ticker: {:?}\n", ticker);
49
50    let markets = client.get_exchange_info().await?;
51    eprintln!("markets: {:?}\n", markets);
52
53    process::exit(0);
54}