bitflags::bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct OpCodeFlag: u32 {
const Read = 1 << 0;
const Readv = 1 << 1;
const Write = 1 << 2;
const Writev = 1 << 3;
const Fsync = 1 << 4;
const Accept = 1 << 5;
const Connect = 1 << 6;
const Recv = 1 << 7;
const Send = 1 << 8;
const RecvMsg = 1 << 9;
const SendMsg = 1 << 10;
const AsyncCancel = 1 << 11;
const OpenAt = 1 << 12;
const Close = 1 << 13;
const Splice = 1 << 14;
const Shutdown = 1 << 15;
const PollAdd = 1 << 16;
}
}
impl OpCodeFlag {
pub fn basic() -> Self {
OpCodeFlag::Read
| OpCodeFlag::Readv
| OpCodeFlag::Write
| OpCodeFlag::Writev
| OpCodeFlag::Fsync
| OpCodeFlag::Accept
| OpCodeFlag::Connect
| OpCodeFlag::Recv
| OpCodeFlag::Send
| OpCodeFlag::RecvMsg
| OpCodeFlag::SendMsg
| OpCodeFlag::PollAdd
}
}
#[cfg(io_uring)]
impl OpCodeFlag {
pub(crate) fn get_codes(self) -> impl Iterator<Item = u8> {
use io_uring::opcode::*;
self.iter().map(|flag| match flag {
OpCodeFlag::Read => Read::CODE,
OpCodeFlag::Readv => Readv::CODE,
OpCodeFlag::Write => Write::CODE,
OpCodeFlag::Writev => Writev::CODE,
OpCodeFlag::Fsync => Fsync::CODE,
OpCodeFlag::Accept => Accept::CODE,
OpCodeFlag::Connect => Connect::CODE,
OpCodeFlag::Recv => Recv::CODE,
OpCodeFlag::Send => Send::CODE,
OpCodeFlag::RecvMsg => RecvMsg::CODE,
OpCodeFlag::SendMsg => SendMsg::CODE,
OpCodeFlag::AsyncCancel => AsyncCancel::CODE,
OpCodeFlag::OpenAt => OpenAt::CODE,
OpCodeFlag::Close => Close::CODE,
OpCodeFlag::Splice => Splice::CODE,
OpCodeFlag::Shutdown => Shutdown::CODE,
OpCodeFlag::PollAdd => PollAdd::CODE,
unknown => unreachable!("Unknown OpCodeFlag specified: {unknown:?}"),
})
}
}