in src/descriptors/struct_desc.rs [12:38]
fn generate_serializer(&self) -> proc_macro2::TokenStream {
let mut versioned_serializers = proc_macro2::TokenStream::new();
for i in 1..=self.version {
let mut versioned_serializer = proc_macro2::TokenStream::new();
let mut semantic_serializer = proc_macro2::TokenStream::new();
// Generate field and semantic serializers for all fields.
// Not all fields have semantic serializers defined and some fields
// might be missing in version `i`. In these cases the generate_serializer() and
// generate_semantic_serializer() will return an empty token stream.
for field in &self.fields {
versioned_serializer.extend(field.generate_serializer(i));
semantic_serializer.extend(field.generate_semantic_serializer(i));
}
// Generate the match arm for version `i`.
versioned_serializers.extend(quote! {
#i => {
#semantic_serializer
#versioned_serializer
}
});
}
versioned_serializers
}