@@ -147,8 +147,10 @@ mod newtype_enum {
147147 enum Inner {
148148 Unit ,
149149 Newtype ( u8 ) ,
150+ Tuple0 ( ) ,
150151 Tuple2 ( u8 , u8 ) ,
151152 Struct { f : u8 } ,
153+ EmptyStruct { } ,
152154 }
153155
154156 // Reaches crate::private::de::content::VariantRefDeserializer::unit_variant
@@ -178,6 +180,22 @@ mod newtype_enum {
178180 ) ;
179181 }
180182
183+ // Reaches crate::private::de::content::VariantRefDeserializer::tuple_variant
184+ #[ test]
185+ fn tuple0 ( ) {
186+ assert_tokens (
187+ & Outer :: Inner ( Inner :: Tuple0 ( ) ) ,
188+ & [
189+ Token :: TupleVariant {
190+ name : "Inner" ,
191+ variant : "Tuple0" ,
192+ len : 0 ,
193+ } ,
194+ Token :: TupleVariantEnd ,
195+ ] ,
196+ ) ;
197+ }
198+
181199 // Reaches crate::private::de::content::VariantRefDeserializer::tuple_variant
182200 #[ test]
183201 fn tuple2 ( ) {
@@ -233,6 +251,44 @@ mod newtype_enum {
233251 ] ,
234252 ) ;
235253 }
254+
255+ // Reaches crate::private::de::content::VariantRefDeserializer::struct_variant
256+ // Content::Map case
257+ // Special case - empty map
258+ #[ test]
259+ fn empty_struct_from_map ( ) {
260+ assert_de_tokens (
261+ & Outer :: Inner ( Inner :: EmptyStruct { } ) ,
262+ & [
263+ Token :: Map { len : Some ( 1 ) } ,
264+ // tag
265+ Token :: Str ( "EmptyStruct" ) ,
266+ // content
267+ Token :: Map { len : Some ( 0 ) } ,
268+ Token :: MapEnd ,
269+ Token :: MapEnd ,
270+ ] ,
271+ ) ;
272+ }
273+
274+ // Reaches crate::private::de::content::VariantRefDeserializer::struct_variant
275+ // Content::Seq case
276+ // Special case - empty seq
277+ #[ test]
278+ fn empty_struct_from_seq ( ) {
279+ assert_de_tokens (
280+ & Outer :: Inner ( Inner :: EmptyStruct { } ) ,
281+ & [
282+ Token :: Map { len : Some ( 1 ) } ,
283+ // tag
284+ Token :: Str ( "EmptyStruct" ) ,
285+ // content
286+ Token :: Seq { len : Some ( 0 ) } ,
287+ Token :: SeqEnd ,
288+ Token :: MapEnd ,
289+ ] ,
290+ ) ;
291+ }
236292}
237293
238294// Reaches crate::private::de::content::ContentRefDeserializer::deserialize_option
0 commit comments