pub mod config;
pub mod epoll;
pub mod interest;
#[cfg(target_os = "linux")]
pub mod iouring;
pub mod kqueue;
pub mod queue;
pub use config::{DriverConfig, DriverConfigBuilder, DriverFactory, DriverType};
pub use interest::Interest;
pub use queue::{CompletionEntry, IoState, SubmitEntry};
use std::os::fd::AsRawFd;
pub trait Driver: Send + Sync + AsRawFd {
fn submit(&self) -> std::io::Result<usize>;
fn wait(&self) -> std::io::Result<usize>;
fn wait_timeout(&self, duration: std::time::Duration) -> std::io::Result<(usize, bool)>;
fn get_submission(&self) -> Option<&mut SubmitEntry>;
fn get_completion(&self) -> Option<&CompletionEntry>;
fn advance_completion(&self);
fn register(&self, fd: std::os::fd::RawFd, interest: Interest) -> std::io::Result<()>;
fn deregister(&self, fd: std::os::fd::RawFd) -> std::io::Result<()>;
fn modify(&self, fd: std::os::fd::RawFd, interest: Interest) -> std::io::Result<()>;
fn submission_capacity(&self) -> usize;
fn completion_capacity(&self) -> usize;
fn supports_operation(&self, opcode: u8) -> bool;
}
pub type RawFd = std::os::fd::RawFd;
pub const ERROR_TRANSPORT: i32 = -1;
pub mod opcode {
pub const READ: u8 = 0;
pub const WRITE: u8 = 1;
pub const FSYNC: u8 = 2;
pub const CLOSE: u8 = 4;
}