fn generate_serializer()

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
    }