compio_driver/sys/op/
flag.rs1bitflags::bitflags! {
2 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
4 pub struct OpCodeFlag: u32 {
5 const Read = 1 << 0;
7 const Readv = 1 << 1;
9 const Write = 1 << 2;
11 const Writev = 1 << 3;
13 const Fsync = 1 << 4;
15 const Accept = 1 << 5;
17 const Connect = 1 << 6;
19 const Recv = 1 << 7;
21 const Send = 1 << 8;
23 const RecvMsg = 1 << 9;
25 const SendMsg = 1 << 10;
27 const AsyncCancel = 1 << 11;
29 const OpenAt = 1 << 12;
31 const Close = 1 << 13;
33 const Splice = 1 << 14;
35 const Shutdown = 1 << 15;
37 const PollAdd = 1 << 16;
39 }
40}
41
42impl OpCodeFlag {
43 pub fn basic() -> Self {
46 OpCodeFlag::Read
47 | OpCodeFlag::Readv
48 | OpCodeFlag::Write
49 | OpCodeFlag::Writev
50 | OpCodeFlag::Fsync
51 | OpCodeFlag::Accept
52 | OpCodeFlag::Connect
53 | OpCodeFlag::Recv
54 | OpCodeFlag::Send
55 | OpCodeFlag::RecvMsg
56 | OpCodeFlag::SendMsg
57 | OpCodeFlag::PollAdd
58 }
59}
60
61#[cfg(io_uring)]
62impl OpCodeFlag {
63 pub(crate) fn get_codes(self) -> impl Iterator<Item = u8> {
64 use io_uring::opcode::*;
65
66 self.iter().map(|flag| match flag {
67 OpCodeFlag::Read => Read::CODE,
68 OpCodeFlag::Readv => Readv::CODE,
69 OpCodeFlag::Write => Write::CODE,
70 OpCodeFlag::Writev => Writev::CODE,
71 OpCodeFlag::Fsync => Fsync::CODE,
72 OpCodeFlag::Accept => Accept::CODE,
73 OpCodeFlag::Connect => Connect::CODE,
74 OpCodeFlag::Recv => Recv::CODE,
75 OpCodeFlag::Send => Send::CODE,
76 OpCodeFlag::RecvMsg => RecvMsg::CODE,
77 OpCodeFlag::SendMsg => SendMsg::CODE,
78 OpCodeFlag::AsyncCancel => AsyncCancel::CODE,
79 OpCodeFlag::OpenAt => OpenAt::CODE,
80 OpCodeFlag::Close => Close::CODE,
81 OpCodeFlag::Splice => Splice::CODE,
82 OpCodeFlag::Shutdown => Shutdown::CODE,
83 OpCodeFlag::PollAdd => PollAdd::CODE,
84 unknown => unreachable!("Unknown OpCodeFlag specified: {unknown:?}"),
85 })
86 }
87}