Skip to main content

compio_driver/sys/driver/fusion/
op.rs

1use super::*;
2
3/// Fused [`OpCode`]
4///
5/// This trait encapsulates both operation for `io-uring` and `polling`
6pub trait OpCode: PollOpCode + IourOpCode {}
7
8impl<T: PollOpCode + IourOpCode + ?Sized> OpCode for T {}
9
10pub(crate) trait Carry: iour::Carry + poll::Carry {
11    unsafe fn set_result(&mut self, result: &io::Result<usize>, extra: &crate::Extra);
12}
13
14impl<C: iour::Carry + poll::Carry> Carry for C {
15    unsafe fn set_result(&mut self, result: &io::Result<usize>, extra: &crate::Extra) {
16        unsafe {
17            if extra.is_iour() {
18                iour::Carry::set_result(self, result, extra);
19            } else {
20                poll::Carry::set_result(self, result, extra);
21            }
22        }
23    }
24}