CCXT
Rust Examples

Binance Basics

Binance Basics — CCXT Rust code example.

// CCXT Rust — Binance typed example.
//
// Uses the typed wrapper `ccxt::Binance`: every unified method returns a native
// Rust struct (`Ticker`, `Vec<Trade>`, …) instead of the dynamic `Value`. The
// wrapper owns the transpiled `BinanceCore` and drives it; `load_markets()`
// performs the describe()/implicit-API setup internally, so callers don't touch
// the low-level dispatch machinery.
//
// Note: the underlying behaviour is transpiled from `ts/src/binance.ts` — to
// change it, edit the TypeScript and re-run the Rust transpiler.
use ccxt::Binance;
use ccxt::Params;

#[tokio::main]
async fn main() {
    println!("=== Binance — CCXT Rust typed example ===\n");

    let mut binance = Binance::new(None);

    // Fetch + cache markets (also wires describe()/implicit-API under the hood).
    println!("→ load_markets() …");
    binance.load_markets(false).await;

    // fetch_tickers() -> Tickers  (HashMap<String, Ticker>)
    println!("→ fetch_tickers() -> Tickers");
    match binance.fetch_tickers(None, Params::none()).await {
        Ok(tickers) => {
            println!("   ✓ {} tickers", tickers.len());
            for sym in ["BTC/USDT", "ETH/USDT", "SOL/USDT"] {
                if let Some(t) = tickers.get(sym) {
                    println!(
                        "     {sym:<10} last={:?} baseVol={:?}",
                        t.last, t.base_volume
                    );
                }
            }
        }
        Err(e) => println!("   ✗ {e}"),
    }

    // fetch_trades(symbol, since, limit, params) -> Vec<Trade>
    println!("\n→ fetch_trades(\"BTC/USDT\", limit=5) -> Vec<Trade>");
    match binance
        .fetch_trades("BTC/USDT", None, Some(5), Params::none())
        .await
    {
        Ok(trades) => {
            println!("   ✓ {} trades", trades.len());
            for t in trades.iter().take(5) {
                println!(
                    "     {:<4} price={:?} amount={:?}",
                    t.side.as_deref().unwrap_or("?"),
                    t.price,
                    t.amount
                );
            }
        }
        Err(e) => println!("   ✗ {e}"),
    }
}