@@ -28,9 +28,6 @@ mod tag;
2828mod tests;
2929mod value;
3030
31- const SERDE_CONTENT_CANARY : & str = "serde::__private::de::content::Content" ;
32- const SERDE_TAG_KEY_CANARY : & str = "serde::__private::de::content::TagOrContent" ;
33-
3431/// The RON deserializer.
3532///
3633/// If you just want to simply deserialize a value,
@@ -179,8 +176,8 @@ impl<'de> Deserializer<'de> {
179176 {
180177 // HACK: switch to JSON enum semantics for JSON content
181178 // Robust impl blocked on https://github.com/serde-rs/serde/pull/2420
182- let is_serde_content = core :: any :: type_name :: < V :: Value > ( ) == SERDE_CONTENT_CANARY
183- || core :: any :: type_name :: < V :: Value > ( ) == SERDE_TAG_KEY_CANARY ;
179+ let is_serde_content =
180+ is_serde_content :: < V :: Value > ( ) || is_serde_tag_or_content :: < V :: Value > ( ) ;
184181
185182 let old_serde_content_newtype = self . serde_content_newtype ;
186183 self . serde_content_newtype = false ;
@@ -857,8 +854,7 @@ impl<'de, 'a> de::MapAccess<'de> for CommaSeparated<'a, 'de> {
857854 K : DeserializeSeed < ' de > ,
858855 {
859856 if self . has_element ( ) ? {
860- self . inside_internally_tagged_enum =
861- core:: any:: type_name :: < K :: Value > ( ) == SERDE_TAG_KEY_CANARY ;
857+ self . inside_internally_tagged_enum = is_serde_tag_or_content :: < K :: Value > ( ) ;
862858
863859 match self . terminator {
864860 Terminator :: Struct => guard_recursion ! { self . de =>
@@ -883,9 +879,7 @@ impl<'de, 'a> de::MapAccess<'de> for CommaSeparated<'a, 'de> {
883879 if self . de . parser . consume_char ( ':' ) {
884880 self . de . parser . skip_ws ( ) ?;
885881
886- let res = if self . inside_internally_tagged_enum
887- && core:: any:: type_name :: < V :: Value > ( ) != SERDE_CONTENT_CANARY
888- {
882+ let res = if self . inside_internally_tagged_enum && !is_serde_content :: < V :: Value > ( ) {
889883 guard_recursion ! { self . de =>
890884 seed. deserialize( & mut tag:: Deserializer :: new( & mut * self . de) ) ?
891885 }
@@ -1052,3 +1046,19 @@ impl<'de, 'a> de::MapAccess<'de> for SerdeEnumContent<'a, 'de> {
10521046 result
10531047 }
10541048}
1049+
1050+ // ensure that these are the same as in the 449_tagged_enum test
1051+ fn is_serde_content < T > ( ) -> bool {
1052+ matches ! (
1053+ core:: any:: type_name:: <T >( ) ,
1054+ "serde::__private::de::content::Content" | "serde::__private::de::content::Content<'_>"
1055+ )
1056+ }
1057+
1058+ fn is_serde_tag_or_content < T > ( ) -> bool {
1059+ matches ! (
1060+ core:: any:: type_name:: <T >( ) ,
1061+ "serde::__private::de::content::TagOrContent"
1062+ | "serde::__private::de::content::TagOrContent<'_>"
1063+ )
1064+ }
0 commit comments