use std::io;
use std::sync::Arc;
#[cfg_attr(test, test)]
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(op, Some(guard.clone()))
.expect("submit op to scheduler")
};
println!("reply future created: {reply:?}");
let reply = reply.wait();
println!("our task completed with reply: {reply:?}");
assert!(reply.is_ok());
println!("shutting down scheduler");
drop(scheduler_handle);
thread_handle
.join()
.expect("scheduler should never panic")?;
println!("scheduler shutdown complete!");
Ok(())
}