| 158 | #[test] |
| 159 | #[cfg(feature = "alloc")] |
| 160 | fn derive_enum_skip() { |
| 161 | #[derive(Zeroize, ZeroizeOnDrop)] |
| 162 | enum Z { |
| 163 | #[allow(dead_code)] |
| 164 | Variant1, |
| 165 | #[zeroize(skip)] |
| 166 | Variant2([u8; 3]), |
| 167 | #[zeroize(skip)] |
| 168 | Variant3 { |
| 169 | string: String, |
| 170 | vec: Vec<u8>, |
| 171 | bytearray: [u8; 3], |
| 172 | number: usize, |
| 173 | boolean: bool, |
| 174 | }, |
| 175 | Variant4 { |
| 176 | string: String, |
| 177 | vec: Vec<u8>, |
| 178 | #[zeroize(skip)] |
| 179 | bytearray: [u8; 3], |
| 180 | number: usize, |
| 181 | boolean: bool, |
| 182 | }, |
| 183 | } |
| 184 | |
| 185 | let mut value = Z::Variant2([4, 5, 6]); |
| 186 | |
| 187 | value.zeroize(); |
| 188 | |
| 189 | assert!(matches!(&value, Z::Variant2([4, 5, 6]))); |
| 190 | |
| 191 | let mut value = Z::Variant3 { |
| 192 | string: String::from("Hello, world!"), |
| 193 | vec: vec![1, 2, 3], |
| 194 | bytearray: [4, 5, 6], |
| 195 | number: 42, |
| 196 | boolean: true, |
| 197 | }; |
| 198 | |
| 199 | value.zeroize(); |
| 200 | |
| 201 | assert!(matches!( |
| 202 | &value, |
| 203 | Z::Variant3 { string, vec, bytearray, number, boolean } |
| 204 | if string == "Hello, world!" && |
| 205 | vec == &[1, 2, 3] && |
| 206 | bytearray == &[4, 5, 6] && |
| 207 | *number == 42 && |
| 208 | *boolean |
| 209 | )); |
| 210 | |
| 211 | let mut value = Z::Variant4 { |
| 212 | string: String::from("Hello, world!"), |
| 213 | vec: vec![1, 2, 3], |
| 214 | bytearray: [4, 5, 6], |
| 215 | number: 42, |
| 216 | boolean: true, |
| 217 | }; |