@@ -70,64 +70,15 @@ const TCA_CLS_FLAGS_IN_HW: u32 = 1 << 2;
7070const  TCA_CLS_FLAGS_NOT_IN_HW :  u32  = 1  << 3 ; 
7171const  TCA_CLS_FLAGS_VERBOSE :  u32  = 1  << 4 ; 
7272
73- #[ derive( Debug ,  PartialEq ,  Eq ,  Clone ,  Copy ) ]  
74- #[ non_exhaustive]  
75- pub  enum  TcU32OptionFlag  { 
76-     SkipHw , 
77-     SkipSw , 
78-     InHw , 
79-     NotInHw , 
80-     Verbose , 
81-     Other ( u32 ) , 
82- } 
83- 
84- impl  From < TcU32OptionFlag >  for  u32  { 
85-     fn  from ( v :  TcU32OptionFlag )  -> u32  { 
86-         match  v { 
87-             TcU32OptionFlag :: SkipHw  => TCA_CLS_FLAGS_SKIP_HW , 
88-             TcU32OptionFlag :: SkipSw  => TCA_CLS_FLAGS_SKIP_SW , 
89-             TcU32OptionFlag :: InHw  => TCA_CLS_FLAGS_IN_HW , 
90-             TcU32OptionFlag :: NotInHw  => TCA_CLS_FLAGS_NOT_IN_HW , 
91-             TcU32OptionFlag :: Verbose  => TCA_CLS_FLAGS_VERBOSE , 
92-             TcU32OptionFlag :: Other ( i)  => i, 
93-         } 
94-     } 
95- } 
96- 
97- const  ALL_OPTION_FLAGS :  [ TcU32OptionFlag ;  5 ]  = [ 
98-     TcU32OptionFlag :: SkipHw , 
99-     TcU32OptionFlag :: SkipSw , 
100-     TcU32OptionFlag :: InHw , 
101-     TcU32OptionFlag :: NotInHw , 
102-     TcU32OptionFlag :: Verbose , 
103- ] ; 
104- 
105- #[ derive( Clone ,  Eq ,  PartialEq ,  Debug ) ]  
106- pub ( crate )  struct  VecTcU32OptionFlag ( pub ( crate )  Vec < TcU32OptionFlag > ) ; 
107- 
108- impl  From < u32 >  for  VecTcU32OptionFlag  { 
109-     fn  from ( d :  u32 )  -> Self  { 
110-         let  mut  got:  u32  = 0 ; 
111-         let  mut  ret = Vec :: new ( ) ; 
112-         for  flag in  ALL_OPTION_FLAGS  { 
113-             if  ( d &  ( u32:: from ( flag) ) )  > 0  { 
114-                 ret. push ( flag) ; 
115-                 got += u32:: from ( flag) ; 
116-             } 
117-         } 
118-         if  got != d { 
119-             ret. push ( TcU32OptionFlag :: Other ( d - got) ) ; 
120-         } 
121-         Self ( ret) 
122-     } 
123- } 
124- 
125- impl  From < & VecTcU32OptionFlag >  for  u32  { 
126-     fn  from ( v :  & VecTcU32OptionFlag )  -> u32  { 
127-         let  mut  d:  u32  = 0 ; 
128-         for  flag in  & v. 0  { 
129-             d += u32:: from ( * flag) ; 
130-         } 
131-         d
73+ bitflags !  { 
74+     #[ derive( Debug ,  PartialEq ,  Eq ,  Clone ,  Copy ) ] 
75+     #[ non_exhaustive] 
76+     pub  struct  TcU32OptionFlags :  u32  { 
77+         const  SkipHw  = TCA_CLS_FLAGS_SKIP_HW ; 
78+         const  SkipSw  = TCA_CLS_FLAGS_SKIP_SW ; 
79+         const  InHw  = TCA_CLS_FLAGS_IN_HW ; 
80+         const  NotInHw  = TCA_CLS_FLAGS_NOT_IN_HW ; 
81+         const  Verbose  = TCA_CLS_FLAGS_VERBOSE ; 
82+         const  _ = !0 ; 
13283    } 
13384} 
0 commit comments