rusty-bybit 0.1.1

An unofficial Rust SDK for the Bybit V5 API
Documentation
use rusty_bybit::BybitClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("Bybit Market Data Examples\n");

    let client = BybitClient::testnet();

    println!("1. Getting server time...");
    let server_time = client.get_server_time().await?;
    println!("   Server time: {} seconds", server_time.time_second);
    println!("   Nano time: {}", server_time.time_nano);

    println!("\n2. Getting tickers for linear market...");
    let tickers = client.get_tickers("linear").await?;
    println!("   Total tickers: {}", tickers.list.len());
    if let Some(ticker) = tickers.list.first() {
        println!("   First ticker:");
        println!("     Symbol: {}", ticker.symbol);
        println!("     Last price: {}", ticker.last_price);
        println!("     Bid: {} @ {}", ticker.bid1_price, ticker.bid1_size);
        println!("     Ask: {} @ {}", ticker.ask1_price, ticker.ask1_size);
    }

    println!("\n3. Getting orderbook for BTCUSDT...");
    let orderbook = client.get_orderbook("linear", "BTCUSDT", 10).await?;
    println!("   Orderbook for BTCUSDT:");
    if !orderbook.b.is_empty() {
        println!("     Best bid: {} @ {}", orderbook.b[0].0, orderbook.b[0].1);
    }
    if !orderbook.a.is_empty() {
        println!("     Best ask: {} @ {}", orderbook.a[0].0, orderbook.a[0].1);
    }
    println!("   Total bids: {}", orderbook.b.len());
    println!("   Total asks: {}", orderbook.a.len());

    println!("\n4. Getting instrument info for linear market...");
    let instruments = client.get_instruments("linear").await?;
    println!("   Total instruments: {}", instruments.list.len());
    if let Some(instrument) = instruments.list.first() {
        println!("   First instrument:");
        println!("     Symbol: {}", instrument.symbol);
        println!("     Contract type: {}", instrument.contract_type);
        println!("     Status: {}", instrument.status);
        println!("     Base coin: {}", instrument.base_coin);
        println!("     Quote coin: {}", instrument.quote_coin);
    }

    println!("\n5. Getting kline data for BTCUSDT (15 min interval)...");
    let klines = client
        .get_kline("linear", "BTCUSDT", "15", None, None)
        .await?;
    if let Some(list) = klines.get("list").and_then(|v| v.as_array()) {
        println!("   Total klines: {}", list.len());
        if let Some(first_kline) = list.first().and_then(|v| v.as_array())
            && first_kline.len() >= 6
        {
            println!("   Latest kline:");
            println!("     Timestamp: {}", first_kline[0]);
            println!("     Open: {}", first_kline[1]);
            println!("     High: {}", first_kline[2]);
            println!("     Low: {}", first_kline[3]);
            println!("     Close: {}", first_kline[4]);
            println!("     Volume: {}", first_kline[5]);
        }
    }

    println!("\n6. Getting tickers for inverse market...");
    let inverse_tickers = client.get_tickers("inverse").await?;
    println!("   Total inverse tickers: {}", inverse_tickers.list.len());

    println!("\n7. Getting tickers for spot market...");
    let spot_tickers = client.get_tickers("spot").await?;
    println!("   Total spot tickers: {}", spot_tickers.list.len());

    println!("\nMarket data examples completed successfully!");

    Ok(())
}