simulator-client 0.3.0

Async WebSocket client for the Solana simulator backtest API
Documentation

Ergonomic async client for the simulator backtest WebSocket API.

This wraps the simulator-api request/response protocol with helpers for common workflows (create session, wait ready, continue/advance, close), while still allowing full access to raw BacktestRequest / BacktestResponse when needed.

Quickstart

use std::time::Duration;

use simulator_client::{BacktestClient, Continue, CreateSession};

# async fn example() -> Result<(), Box<dyn std::error::Error>> {
let client = BacktestClient::builder()
    .url("ws://localhost:8900/backtest")
    .api_key("local-dev-key")
    .build();

let mut session = client
    .create_session(
        CreateSession::builder()
            .start_slot(100)
            .slot_count(10)
            .build(),
    )
    .await?;

session.ensure_ready(Some(Duration::from_secs(30))).await?;
session
    .continue_until_ready(
        Continue::builder().advance_count(1).build(),
        None,
        |_| {},
    )
    .await?;
session.close(Some(Duration::from_secs(10))).await?;
# Ok(()) }

Lifecycle notes

  • BacktestClient::create_session sends CreateBacktestSession and waits for SessionCreated, buffering other responses until the session is ready.
  • BacktestSession::close sends CloseBacktestSession and then closes the WebSocket.
  • Dropping BacktestSession sends a best-effort WebSocket close frame if a Tokio runtime is available. Call close explicitly to ensure server-side session cleanup.
  • connect_timeout governs the initial handshake; request_timeout applies to send/receive operations and can be overridden per call.
  • For streaming workflows, use BacktestSession::responses (consumes the session) or next_event to keep readiness state in sync while consuming responses.