electrum-client-netagnostic 0.21.2

Electrum client library that is network agnostic. Supports plaintext, TLS, WebSocket and Onion servers.
Documentation
//! Batch headers example - demonstrates batch downloading block headers
//!
//! Run with: cargo run --example batch_headers --features use-websocket

use electrum_client_netagnostic::{Batch, Client, ElectrumApi, Param};

fn main() {
    let server = std::env::var("ELECTRUM_SERVER")
        .unwrap_or_else(|_| "wss://rostrum.riften.net:443".to_string());

    println!("Connecting to {}...", server);
    let client = match Client::new(&server) {
        Ok(c) => c,
        Err(e) => {
            eprintln!("Connection failed: {:?}", e);
            return;
        }
    };

    println!("Connected! Testing ping...");
    if let Err(e) = client.ping() {
        eprintln!("Ping failed: {:?}", e);
        return;
    }
    println!("Ping successful!");

    // Create a batch request for multiple block headers
    let mut batch = Batch::default();

    // Request headers for blocks 0, 1, 2, 3, 4
    let heights = [0, 1, 2, 3, 4];
    for height in &heights {
        batch.raw(
            "blockchain.block.header".to_string(),
            vec![Param::Usize(*height)],
        );
    }

    println!("\nBatch requesting {} headers...", heights.len());

    match client.batch_call(&batch) {
        Ok(results) => {
            println!("Got {} results:", results.len());
            for (i, (height, result)) in heights.iter().zip(results.iter()).enumerate() {
                let header_hex = result.as_str().unwrap_or("<not a string>");
                // Show first 32 chars of header hex
                let preview = if header_hex.len() > 64 {
                    format!("{}...", &header_hex[..64])
                } else {
                    header_hex.to_string()
                };
                println!("  [{}] Block {}: {}", i, height, preview);
            }
        }
        Err(e) => {
            eprintln!("Batch call failed: {:?}", e);
        }
    }
}