extern crate clap;
extern crate gemla;
#[macro_use]
extern crate log;
mod test_state;
use anyhow::Result;
use clap::Parser;
use file_linked::constants::data_format::DataFormat;
use gemla::{
core::{Gemla, GemlaConfig},
error::log_error,
};
use std::{path::PathBuf, time::Instant};
use test_state::TestState;
#[derive(Parser)]
#[command(version, about, long_about = None)]
struct Args {
#[arg(short, long)]
file: String,
}
fn main() -> Result<()> {
env_logger::init();
info!("Starting");
let now = Instant::now();
let runtime: Result<()> = tokio::runtime::Builder::new_multi_thread()
.worker_threads(num_cpus::get())
.build()?
.block_on(async {
let args = Args::parse(); let mut gemla = log_error(
Gemla::<TestState>::new(
&PathBuf::from(args.file),
GemlaConfig { overwrite: false },
DataFormat::Json,
)
.await,
)?;
loop {
gemla.simulate(1).await?;
}
});
runtime?;
info!("Finished in {:?}", now.elapsed());
Ok(())
}