in lain_derive/src/mutations.rs [107:143]
fn mutatable_enum(variants: &[Variant], cont_ident: &syn::Ident) -> TokenStream {
let constraints_prelude = mutatable_constraints_prelude();
let match_arms = mutatable_enum_visitor(variants, cont_ident);
if match_arms.is_empty() {
return TokenStream::new();
}
quote! {
// 10% chance to re-generate this field
if mutator.gen_chance(0.10) {
*self = Self::new_fuzzed(mutator, parent_constraints.and_then(|constraints| {
let mut constraints = constraints.clone();
// If base object size has already been accounted for, that means
// the max_size represents the amount of extra data that may be consumed.
// We want to give back the size of this object when generating a new instance
if constraints.base_object_size_accounted_for {
if let Some(max_size) = constraints.max_size.as_mut() {
*max_size = self.serialized_size() + *max_size;
}
}
Some(constraints)
}).as_ref());
return;
}
#constraints_prelude
match *self {
#(#match_arms)*
_ => { /* ignore these */ }
}
}
}