use std::ffi::c_void;
use windows_sys::Win32::Storage::FileSystem::{
FILE_FLUSH_MODE, IORING_BUFFER_INFO, IORING_BUFFER_REF, IORING_CQE, IORING_HANDLE_REF,
};
use windows_sys::core::HRESULT;
use super::real;
pub trait Responses {
unsafe fn submit(
&mut self,
ring: *mut c_void,
wait_operations: u32,
milliseconds: u32,
submitted: *mut u32,
) -> HRESULT {
unsafe { real::SubmitIoRing(ring, wait_operations, milliseconds, submitted) }
}
unsafe fn pop(&mut self, ring: *mut c_void, cqe: *mut IORING_CQE) -> HRESULT {
unsafe { real::PopIoRingCompletion(ring, cqe) }
}
#[allow(clippy::too_many_arguments)]
unsafe fn build_read(
&mut self,
ring: *mut c_void,
file: IORING_HANDLE_REF,
buffer: IORING_BUFFER_REF,
bytes: u32,
offset: u64,
user_data: usize,
flags: i32,
) -> HRESULT {
unsafe { real::BuildIoRingReadFile(ring, file, buffer, bytes, offset, user_data, flags) }
}
#[allow(clippy::too_many_arguments)]
unsafe fn build_write(
&mut self,
ring: *mut c_void,
file: IORING_HANDLE_REF,
buffer: IORING_BUFFER_REF,
bytes: u32,
offset: u64,
caching: i32,
user_data: usize,
flags: i32,
) -> HRESULT {
unsafe {
real::BuildIoRingWriteFile(ring, file, buffer, bytes, offset, caching, user_data, flags)
}
}
unsafe fn build_flush(
&mut self,
ring: *mut c_void,
file: IORING_HANDLE_REF,
mode: FILE_FLUSH_MODE,
user_data: usize,
flags: i32,
) -> HRESULT {
unsafe { real::BuildIoRingFlushFile(ring, file, mode, user_data, flags) }
}
unsafe fn build_cancel(
&mut self,
ring: *mut c_void,
file: IORING_HANDLE_REF,
cancel_user_data: usize,
user_data: usize,
) -> HRESULT {
unsafe { real::BuildIoRingCancelRequest(ring, file, cancel_user_data, user_data) }
}
unsafe fn build_register_files(
&mut self,
ring: *mut c_void,
count: u32,
handles: *const *mut c_void,
user_data: usize,
) -> HRESULT {
unsafe { real::BuildIoRingRegisterFileHandles(ring, count, handles, user_data) }
}
unsafe fn build_register_buffers(
&mut self,
ring: *mut c_void,
count: u32,
buffers: *const IORING_BUFFER_INFO,
user_data: usize,
) -> HRESULT {
unsafe { real::BuildIoRingRegisterBuffers(ring, count, buffers, user_data) }
}
unsafe fn set_completion_event(&mut self, ring: *mut c_void, event: *mut c_void) -> HRESULT {
unsafe { real::SetIoRingCompletionEvent(ring, event) }
}
}