use clap::Parser;
use ferrokinesis::store::StoreOptions;
#[derive(Parser, Debug)]
#[command(name = "ferrokinesis")]
#[command(about = "A local AWS Kinesis mock server for testing")]
struct Args {
#[arg(long, default_value_t = 4567)]
port: u16,
#[arg(long, default_value_t = 500)]
create_stream_ms: u64,
#[arg(long, default_value_t = 500)]
delete_stream_ms: u64,
#[arg(long, default_value_t = 500)]
update_stream_ms: u64,
#[arg(long, default_value_t = 10)]
shard_limit: u32,
}
#[tokio::main]
async fn main() {
let args = Args::parse();
let options = StoreOptions {
create_stream_ms: args.create_stream_ms,
delete_stream_ms: args.delete_stream_ms,
update_stream_ms: args.update_stream_ms,
shard_limit: args.shard_limit,
};
let (app, _store) = ferrokinesis::create_app(options);
let addr = format!("0.0.0.0:{}", args.port);
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
println!("Listening at http://{addr}");
axum::serve(listener, app).await.unwrap();
}