use std::io;
use std::sync::Arc;
#[cfg_attr(not(test), tokio::main)]
#[cfg_attr(test, tokio::test)]
async fn main() -> io::Result<()> {
println!("creating our scheduler worker");
let (thread_handle, scheduler_handle) = i2o2::create_and_spawn()?;
let op = i2o2::opcode::Nop::new();
let guard = Arc::new(());
println!("submitting {op:?} to the scheduler");
let reply = unsafe {
scheduler_handle
.submit_async(op, Some(guard.clone()))
.await
.expect("submit op to scheduler")
};
println!("reply future created: {reply:?}");
let reply = reply.await;
println!("our task completed with reply: {reply:?}");
assert_eq!(reply, Ok(0));
println!("shutting down scheduler");
drop(scheduler_handle);
thread_handle
.join()
.expect("scheduler should never panic")?;
println!("scheduler shutdown complete!");
Ok(())
}