@@ -572,3 +572,91 @@ pub(crate) mod managed {
572572
573573#[ cfg( not( io_uring) ) ]
574574pub use managed:: * ;
575+
576+ bitflags:: bitflags! {
577+ /// Flags for operations.
578+ #[ derive( Debug , Clone , Copy , PartialEq , Eq , Hash ) ]
579+ pub struct OpCodeFlag : u32 {
580+ /// Detect `Read` OpCode
581+ const Read = 1 << 0 ;
582+ /// Detect `Readv` OpCode
583+ const Readv = 1 << 1 ;
584+ /// Detect `Write` OpCode
585+ const Write = 1 << 2 ;
586+ /// Detect `Writev` OpCode
587+ const Writev = 1 << 3 ;
588+ /// Detect `Fsync` OpCode
589+ const Fsync = 1 << 4 ;
590+ /// Detect `Accept` OpCode
591+ const Accept = 1 << 5 ;
592+ /// Detect `Connect` OpCode
593+ const Connect = 1 << 6 ;
594+ /// Detect `Recv` OpCode
595+ const Recv = 1 << 7 ;
596+ /// Detect `Send` OpCode
597+ const Send = 1 << 8 ;
598+ /// Detect `RecvMsg` OpCode
599+ const RecvMsg = 1 << 9 ;
600+ /// Detect `SendMsg` OpCode
601+ const SendMsg = 1 << 10 ;
602+ /// Detect `AsyncCancel` OpCode
603+ const AsyncCancel = 1 << 11 ;
604+ /// Detect `OpenAt` OpCode
605+ const OpenAt = 1 << 12 ;
606+ /// Detect `Close` OpCode
607+ const Close = 1 << 13 ;
608+ /// Detect `Splice` OpCode
609+ const Splice = 1 << 14 ;
610+ /// Detect `Shutdown` OpCode
611+ const Shutdown = 1 << 15 ;
612+ /// Detect `PollAdd` OpCode
613+ const PollAdd = 1 << 16 ;
614+ }
615+ }
616+
617+ impl OpCodeFlag {
618+ /// Get the [`OpCodeFlag`] corresponds to basic OpCodes that are commonly
619+ /// used.
620+ pub fn basic ( ) -> Self {
621+ OpCodeFlag :: Read
622+ | OpCodeFlag :: Readv
623+ | OpCodeFlag :: Write
624+ | OpCodeFlag :: Writev
625+ | OpCodeFlag :: Fsync
626+ | OpCodeFlag :: Accept
627+ | OpCodeFlag :: Connect
628+ | OpCodeFlag :: Recv
629+ | OpCodeFlag :: Send
630+ | OpCodeFlag :: RecvMsg
631+ | OpCodeFlag :: SendMsg
632+ | OpCodeFlag :: PollAdd
633+ }
634+ }
635+
636+ #[ cfg( io_uring) ]
637+ impl OpCodeFlag {
638+ pub ( crate ) fn get_codes ( self ) -> impl Iterator < Item = u8 > {
639+ use io_uring:: opcode:: * ;
640+
641+ self . iter ( ) . map ( |flag| match flag {
642+ OpCodeFlag :: Read => Read :: CODE ,
643+ OpCodeFlag :: Readv => Readv :: CODE ,
644+ OpCodeFlag :: Write => Write :: CODE ,
645+ OpCodeFlag :: Writev => Writev :: CODE ,
646+ OpCodeFlag :: Fsync => Fsync :: CODE ,
647+ OpCodeFlag :: Accept => Accept :: CODE ,
648+ OpCodeFlag :: Connect => Connect :: CODE ,
649+ OpCodeFlag :: Recv => Recv :: CODE ,
650+ OpCodeFlag :: Send => Send :: CODE ,
651+ OpCodeFlag :: RecvMsg => RecvMsg :: CODE ,
652+ OpCodeFlag :: SendMsg => SendMsg :: CODE ,
653+ OpCodeFlag :: AsyncCancel => AsyncCancel :: CODE ,
654+ OpCodeFlag :: OpenAt => OpenAt :: CODE ,
655+ OpCodeFlag :: Close => Close :: CODE ,
656+ OpCodeFlag :: Splice => Splice :: CODE ,
657+ OpCodeFlag :: Shutdown => Shutdown :: CODE ,
658+ OpCodeFlag :: PollAdd => PollAdd :: CODE ,
659+ unknown => unreachable ! ( "Unknown OpCodeFlag specified: {unknown:?}" ) ,
660+ } )
661+ }
662+ }
0 commit comments