diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 5d403613..20ccb696 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -1386,21 +1386,26 @@ fn deserialize_identifier( "field identifier" }; - let variant_indices = 0u32..; - let fallthrough_msg = format!("variant index 0 <= i < {}", fields.len()); - let visit_index = quote! { - fn visit_u32<__E>(self, __value: u32) -> _serde::export::Result - where __E: _serde::de::Error - { - match __value { - #( - #variant_indices => _serde::export::Ok(#constructors), - )* - _ => _serde::export::Err(_serde::de::Error::invalid_value( - _serde::de::Unexpected::Unsigned(__value as u64), - &#fallthrough_msg)) + let visit_index = if is_variant { + let variant_indices = 0u32..; + let fallthrough_msg = format!("variant index 0 <= i < {}", fields.len()); + let visit_index = quote! { + fn visit_u32<__E>(self, __value: u32) -> _serde::export::Result + where __E: _serde::de::Error + { + match __value { + #( + #variant_indices => _serde::export::Ok(#constructors), + )* + _ => _serde::export::Err(_serde::de::Error::invalid_value( + _serde::de::Unexpected::Unsigned(__value as u64), + &#fallthrough_msg)) + } } - } + }; + Some(visit_index) + } else { + None }; let bytes_to_str = if fallthrough.is_some() { diff --git a/test_suite/tests/test_de.rs b/test_suite/tests/test_de.rs index c0a889af..d1bddfaf 100644 --- a/test_suite/tests/test_de.rs +++ b/test_suite/tests/test_de.rs @@ -605,17 +605,6 @@ declare_tests! { Token::StructEnd, ], } - test_struct_integer_keys { - Struct { a: 1, b: 2, c: 0 } => &[ - Token::Struct { name: "Struct", len: 2 }, - Token::U32(0), - Token::I32(1), - - Token::U32(1), - Token::I32(2), - Token::StructEnd, - ], - } test_enum_unit { Enum::Unit => &[ Token::UnitVariant { name: "Enum", variant: "Unit" },