#[cfg(feature = "epoll")]
mod epoll_ctl;
#[cfg(feature = "epoll")]
pub use epoll_ctl::OpExtEpollCtl;
#[cfg(feature = "connect")]
mod connect;
#[cfg(feature = "connect")]
pub use connect::OpExtConnect;
use core::pin::Pin;
use io_uring_owner::Owner;
use crate::OpError;
pub trait OpCompletion {
type Error;
fn entry(&self) -> io_uring::squeue::Entry;
fn owner(&self) -> Owner;
fn force_owner_kernel(&mut self) -> bool;
}
pub trait OpCode<C: OpCompletion> {
fn submission(self) -> Result<C, OpError>;
fn completion(&mut self, _: Pin<&mut C>) -> Result<(), OpError>;
}