io_uring_bearer/
completion.rs1use crate::slab::AcceptRec;
4use crate::slab::FutexWaitRec;
6use crate::slab::ProvideBuffersRec;
7use crate::slab::SendZcRec;
8use crate::slab::{RecvMultiRec, RecvRec};
9use io_uring_owner::Owner;
11
12use io_uring_opcode::OpCompletion;
13
14#[derive(Clone, Debug)]
16pub enum Completion<C> {
17 Accept(AcceptRec),
21 ProvideBuffers(ProvideBuffersRec),
23 FutexWait(FutexWaitRec),
25 Recv(RecvRec),
27 RecvMulti(RecvMultiRec),
29 SendZc(SendZcRec),
31 #[cfg(feature = "connect")]
33 Connect(C),
34 #[cfg(feature = "epoll")]
36 EpollCtl(C),
37 Op(C),
39}
40
41impl<C: OpCompletion> Completion<C> {
42 #[inline]
43 pub(crate) fn entry(&self) -> io_uring::squeue::Entry {
44 match self {
45 Completion::Recv(r) => r.entry(),
46 Completion::RecvMulti(r) => r.entry(),
47 Completion::SendZc(r) => r.entry(),
48 Completion::Op(r) => r.entry(),
49 #[cfg(feature = "connect")]
50 Completion::Connect(r) => r.entry(),
51 #[cfg(feature = "epoll")]
52 Completion::EpollCtl(r) => r.entry(),
53 _ => todo!(),
54 }
55 }
56 #[inline]
57 pub(crate) fn owner(&self) -> Owner {
58 match self {
59 Self::Recv(ref recv) => recv.owner(),
60 Self::RecvMulti(ref recv_multi) => recv_multi.owner(),
61 Self::SendZc(ref send_zc) => send_zc.owner(),
62 Self::Op(ref impl_op) => impl_op.owner(),
63 #[cfg(feature = "connect")]
64 Self::Connect(ref impl_op) => impl_op.owner(),
65 #[cfg(feature = "epoll")]
66 Self::EpollCtl(ref impl_op) => impl_op.owner(),
67 _ => todo!(),
68 }
69 }
70 #[inline]
71 pub(crate) fn force_owner_kernel(&mut self) -> bool {
72 match self {
73 Self::Recv(ref mut recv) => recv.force_owner_kernel(),
74 Self::RecvMulti(ref mut recv_multi) => recv_multi.force_owner_kernel(),
75 Self::SendZc(ref mut send_zc) => send_zc.force_owner_kernel(),
76 Self::Op(ref mut impl_op) => impl_op.force_owner_kernel(),
77 #[cfg(feature = "connect")]
78 Self::Connect(ref mut impl_op) => impl_op.force_owner_kernel(),
79 #[cfg(feature = "epoll")]
80 Self::EpollCtl(ref mut impl_op) => impl_op.force_owner_kernel(),
81 _ => todo!(),
82 }
83 }
84}
85
86#[derive(Clone, Debug, PartialEq)]
89pub enum SubmissionRecordStatus {
90 Retain,
94 Forget,
98}