use pyth_benchmark_rs::{ DataFeed, SymbolInfo, PeriodParams, start_streaming };
use std::collections::HashMap;
use std::sync::{ Arc, Mutex };
use anyhow::Result;
#[tokio::main]
async fn main() -> Result<()> {
println!("๐ Starting Pyth Benchmark Rust Client Example");
let subscriptions = Arc::new(Mutex::new(HashMap::new()));
let datafeed = DataFeed::new(subscriptions.clone());
datafeed.on_ready(|config| {
println!("๐ DataFeed ready with config: {:?}", config);
}).await;
println!("\n๐ Fetching historical data for ETH/USD...");
let symbol_info = SymbolInfo::new("Crypto.ETH/USD");
let period_params = PeriodParams::last_days(20, true);
datafeed.get_bars(
&symbol_info,
"60", &period_params,
|bars, no_data| {
if no_data {
println!("โ No historical data available");
} else {
println!("โ
Received {} historical bars", bars.len());
for (i, bar) in bars.iter().enumerate().take(100) {
println!(
" Bar {}: time={}, O={:.2}, H={:.2}, L={:.2}, C={:.2}",
i + 1,
bar.time,
bar.open,
bar.high,
bar.low,
bar.close
);
}
if bars.len() > 10 {
println!(" ... and {:?} more bars", bars);
}
}
},
|err| {
eprintln!("โ Error fetching historical data: {}", err);
}
).await;
Ok(())
}