@@ -478,7 +478,14 @@ fn serialize_variant(
478
478
serialize_internally_tagged_variant ( params, variant, cattrs, tag)
479
479
}
480
480
( attr:: TagType :: Adjacent { tag, content } , false ) => {
481
- serialize_adjacently_tagged_variant ( params, variant, cattrs, tag, content)
481
+ serialize_adjacently_tagged_variant (
482
+ params,
483
+ variant,
484
+ cattrs,
485
+ variant_index,
486
+ tag,
487
+ content,
488
+ )
482
489
}
483
490
( attr:: TagType :: None , _) | ( _, true ) => {
484
491
serialize_untagged_variant ( params, variant, cattrs)
@@ -634,12 +641,14 @@ fn serialize_adjacently_tagged_variant(
634
641
params : & Parameters ,
635
642
variant : & Variant ,
636
643
cattrs : & attr:: Container ,
644
+ variant_index : u32 ,
637
645
tag : & str ,
638
646
content : & str ,
639
647
) -> Fragment {
640
648
let this_type = & params. this_type ;
641
649
let type_name = cattrs. name ( ) . serialize_name ( ) ;
642
650
let variant_name = variant. attrs . name ( ) . serialize_name ( ) ;
651
+ let variant_serializer = quote ! ( & _serde:: __private:: ser:: AdjacentlyTaggedEnumVariantSerializer :: new( #tag, #variant_index, #variant_name) ) ;
643
652
644
653
let inner = Stmts ( if let Some ( path) = variant. attrs . serialize_with ( ) {
645
654
let ser = wrap_serialize_variant_with ( params, path, variant) ;
@@ -653,7 +662,7 @@ fn serialize_adjacently_tagged_variant(
653
662
let mut __struct = _serde:: Serializer :: serialize_struct(
654
663
__serializer, #type_name, 1 ) ?;
655
664
_serde:: ser:: SerializeStruct :: serialize_field(
656
- & mut __struct, #tag, #variant_name ) ?;
665
+ & mut __struct, #tag, #variant_serializer ) ?;
657
666
_serde:: ser:: SerializeStruct :: end( __struct)
658
667
} ;
659
668
}
@@ -670,7 +679,7 @@ fn serialize_adjacently_tagged_variant(
670
679
let mut __struct = _serde:: Serializer :: serialize_struct(
671
680
__serializer, #type_name, 2 ) ?;
672
681
_serde:: ser:: SerializeStruct :: serialize_field(
673
- & mut __struct, #tag, #variant_name ) ?;
682
+ & mut __struct, #tag, #variant_serializer ) ?;
674
683
#func(
675
684
& mut __struct, #content, #field_expr) ?;
676
685
_serde:: ser:: SerializeStruct :: end( __struct)
@@ -735,7 +744,7 @@ fn serialize_adjacently_tagged_variant(
735
744
let mut __struct = _serde:: Serializer :: serialize_struct(
736
745
__serializer, #type_name, 2 ) ?;
737
746
_serde:: ser:: SerializeStruct :: serialize_field(
738
- & mut __struct, #tag, #variant_name ) ?;
747
+ & mut __struct, #tag, #variant_serializer ) ?;
739
748
_serde:: ser:: SerializeStruct :: serialize_field(
740
749
& mut __struct, #content, & __AdjacentlyTagged {
741
750
data: ( #( #fields_ident, ) * ) ,
0 commit comments