use clap::Parser;
use epics_ca_rs::replay::{RecordedEvent, replay};
#[derive(Parser)]
#[command(name = "ca-replay-rs")]
struct Args {
#[arg(long)]
file: String,
#[arg(long)]
paced: bool,
#[arg(long)]
filter: Option<String>,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let args = Args::parse();
let filter = args.filter;
let count = replay(&args.file, args.paced, |ev| {
let kind = match ev {
RecordedEvent::BeaconRecv { .. } => "beacon_recv",
RecordedEvent::ClientConnect { .. } => "client_connect",
RecordedEvent::ClientDisconnect { .. } => "client_disconnect",
};
if let Some(ref f) = filter
&& f != kind
{
return;
}
println!("{}", ev.to_json());
})
.await?;
eprintln!("replayed {count} events");
Ok(())
}