//! A simple example of deriving the `Arbitrary` trait for an `enum`. //! //! Note that this requires enabling the "derive" cargo feature. // Various enums/fields that we are deriving `Arbitrary` for aren't actually // used except to show off the derive. #![allow(dead_code)] use arbitrary::{Arbitrary, Unstructured}; #[derive(Arbitrary, Debug)] enum MyEnum { Unit, Tuple(bool, u32), Struct { x: i8, y: (u8, i32), }, #[arbitrary(skip)] Skipped(usize), } fn main() { let raw = b"This is some raw, unstructured data!"; let mut unstructured = Unstructured::new(raw); let instance = MyEnum::arbitrary(&mut unstructured) .expect("`unstructured` has enough underlying data to create all variants of `MyEnum`"); println!("Here is an arbitrary enum: {:?}", instance); }