lio-uring 0.3.1

Production-ready, safe, and ergonomic Rust interface to Linux io_uring
Documentation
#[allow(
  unused,
  non_upper_case_globals,
  non_snake_case,
  non_camel_case_types,
  unsafe_op_in_unsafe_fn
)]
mod bindings {
  include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
}

pub use bindings::*;

#[cfg(test)]
mod tests {
  use super::*;

  #[test]
  fn liburing_smoke() {
    use std::mem::MaybeUninit;
    unsafe {
      let mut ring = MaybeUninit::zeroed();
      let ret = self::io_uring_queue_init(5, ring.as_mut_ptr(), 0);
      assert_eq!(ret, 0, "queue_init failed: {}", ret);
      let mut ring = ring.assume_init();

      let sqe = self::io_uring_get_sqe(&raw mut ring);
      assert!(!sqe.is_null());

      self::io_uring_prep_nop(sqe);
      self::io_uring_sqe_set_data(sqe, 0x1337 as *mut _);
      let submitted = self::io_uring_submit(&raw mut ring);
      assert_eq!(submitted, 1, "submit failed: {}", submitted);

      let mut cqe_ptr: *mut io_uring_cqe = std::ptr::null_mut();
      let ret = io_uring_wait_cqe(&raw mut ring, &raw mut cqe_ptr);
      assert_eq!(ret, 0, "wait_cqe failed: {}", ret);
      assert!(!cqe_ptr.is_null());

      let user_data = io_uring_cqe_get_data(cqe_ptr);
      println!("user_data = {:p}", user_data);

      io_uring_cqe_seen(&raw mut ring, cqe_ptr);

      io_uring_queue_exit(&raw mut ring);
    }
  }
}