//! 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 { UnitVariant, TupleVariant(bool, u32), StructVariant { x: i8, y: (u8, i32) }, } 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); }