@@ -347,7 +347,7 @@ pub(crate) fn derive_deserialize(ty: &SatsType<'_>) -> TokenStream {
347347 de_generics. params . insert ( 0 , de_lt_param. into ( ) ) ;
348348 let ( de_impl_generics, _, de_where_clause) = de_generics. split_for_impl ( ) ;
349349
350- let ( iter_n, iter_n2, iter_n3) = ( 0usize .., 0usize .., 0usize ..) ;
350+ let ( iter_n, iter_n2, iter_n3, iter_n4 ) = ( 0usize .. , 0usize .., 0usize .., 0usize ..) ;
351351
352352 match & ty. data {
353353 SatsTypeData :: Product ( fields) => {
@@ -443,8 +443,8 @@ pub(crate) fn derive_deserialize(ty: &SatsType<'_>) -> TokenStream {
443443 impl #de_impl_generics #spacetimedb_lib:: de:: FieldNameVisitor <' de> for __ProductVisitor #ty_generics #de_where_clause {
444444 type Output = __ProductFieldIdent;
445445
446- fn field_names( & self , names : & mut dyn #spacetimedb_lib :: de :: ValidNames ) {
447- names . extend :: < & [ & str ] > ( & [ #( #field_strings) , * ] )
446+ fn field_names( & self ) -> impl ' _ + Iterator < Item = Option < & str >> {
447+ [ #( #field_strings) , * ] . into_iter ( ) . map ( Some )
448448 }
449449
450450 fn visit<__E: #spacetimedb_lib:: de:: Error >( self , name: & str ) -> Result <Self :: Output , __E> {
@@ -453,6 +453,13 @@ pub(crate) fn derive_deserialize(ty: &SatsType<'_>) -> TokenStream {
453453 _ => Err ( #spacetimedb_lib:: de:: Error :: unknown_field_name( name, & self ) ) ,
454454 }
455455 }
456+
457+ fn visit_seq<__E: #spacetimedb_lib:: de:: Error >( self , index: usize , name: & str ) -> Result <Self :: Output , __E> {
458+ match index {
459+ #( #iter_n4 => Ok ( __ProductFieldIdent:: #field_names) , ) *
460+ _ => Err ( #spacetimedb_lib:: de:: Error :: unknown_field_name( name, & self ) ) ,
461+ }
462+ }
456463 }
457464
458465 #[ allow( non_camel_case_types) ]
@@ -516,11 +523,11 @@ pub(crate) fn derive_deserialize(ty: &SatsType<'_>) -> TokenStream {
516523 #( #variant_idents, ) *
517524 }
518525
519- impl #de_impl_generics #spacetimedb_lib:: de:: VariantVisitor for __SumVisitor #ty_generics #de_where_clause {
526+ impl #de_impl_generics #spacetimedb_lib:: de:: VariantVisitor < ' de> for __SumVisitor #ty_generics #de_where_clause {
520527 type Output = __Variant;
521528
522- fn variant_names( & self , names : & mut dyn #spacetimedb_lib :: de :: ValidNames ) {
523- names . extend :: < & [ & str ] > ( & [ #( #variant_names, ) * ] )
529+ fn variant_names( & self ) -> impl ' _ + Iterator < Item = & str > {
530+ [ #( #variant_names, ) * ] . into_iter ( )
524531 }
525532
526533 fn visit_tag<E : #spacetimedb_lib:: de:: Error >( self , __tag: u8 ) -> Result <Self :: Output , E > {
0 commit comments