Skip to content

Commit 3ea3cc4

Browse files
committed
Add support for internally tagged enums in non self-describing formats
Deserializer methods are only hints which deserializer is not obliged to follow. Both TaggedContentVisitor and InternallyTaggedUnitVisitor accepts only visit_map and visit_seq and that is what derived implementation of Deserialize does for structs. Therefore it is fine to call deserialize_map here, as that already did in derived deserialize implementation
1 parent 1006028 commit 3ea3cc4

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

serde_derive/src/de.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1392,7 +1392,7 @@ fn deserialize_internally_tagged_enum(
13921392

13931393
#variants_stmt
13941394

1395-
let (__tag, __content) = _serde::Deserializer::deserialize_any(
1395+
let (__tag, __content) = _serde::Deserializer::deserialize_map(
13961396
__deserializer,
13971397
_serde::__private::de::TaggedContentVisitor::<__Field>::new(#tag, #expecting))?;
13981398
let __deserializer = _serde::__private::de::ContentDeserializer::<__D::Error>::new(__content);
@@ -1840,7 +1840,7 @@ fn deserialize_internally_tagged_variant(
18401840
quote!((#default))
18411841
});
18421842
quote_block! {
1843-
_serde::Deserializer::deserialize_any(#deserializer, _serde::__private::de::InternallyTaggedUnitVisitor::new(#type_name, #variant_name))?;
1843+
_serde::Deserializer::deserialize_map(#deserializer, _serde::__private::de::InternallyTaggedUnitVisitor::new(#type_name, #variant_name))?;
18441844
_serde::__private::Ok(#this_value::#variant_ident #default)
18451845
}
18461846
}

0 commit comments

Comments
 (0)