@@ -151,6 +151,13 @@ where
151151 ///
152152 /// This operation is *O*(*1*).
153153 pub fn set ( & mut self , toggle_id : usize , value : bool ) {
154+ if toggle_id >= self . toggles_value . len ( ) {
155+ panic ! (
156+ "Out-of-bounds access. The provided toggle_id is {}, but the array size is {}. Please use the default enum value." ,
157+ toggle_id,
158+ self . toggles_value. len( )
159+ ) ;
160+ }
154161 self . toggles_value . set ( toggle_id, value) ;
155162 }
156163
@@ -171,7 +178,7 @@ where
171178 for toggle in T :: iter ( ) {
172179 if let Some ( toggle_id) = T :: iter ( ) . position ( |x| x == toggle) {
173180 let name = toggle. as_ref ( ) ;
174- writeln ! ( f, "{} {} " , self . toggles_value [ toggle_id] as u8 , name) ?;
181+ writeln ! ( f, "{} {} " , self . get ( toggle_id) as u8 , name) ?;
175182 }
176183 }
177184 Ok ( ( ) )
@@ -245,4 +252,19 @@ mod tests {
245252 assert_eq ! ( toggles. get( TestToggles :: Toggle1 as usize ) , true ) ;
246253 assert_eq ! ( toggles. get( TestToggles :: Toggle2 as usize ) , false ) ;
247254 }
255+
256+ #[ derive( AsRefStr , EnumIter , PartialEq ) ]
257+ pub enum DeviantToggles {
258+ Toggle1 = 5 ,
259+ Toggle2 = 10 ,
260+ }
261+
262+ #[ test]
263+ #[ should_panic(
264+ expected = "Out-of-bounds access. The provided toggle_id is 5, but the array size is 2. Please use the default enum value."
265+ ) ]
266+ fn deviant_toggles ( ) {
267+ let mut toggles: EnumToggles < DeviantToggles > = EnumToggles :: new ( ) ;
268+ toggles. set ( DeviantToggles :: Toggle1 as usize , true ) ;
269+ }
248270}
0 commit comments