diff --git a/src/de.rs b/src/de.rs index daf032a7f..5283dd3a2 100644 --- a/src/de.rs +++ b/src/de.rs @@ -2118,25 +2118,7 @@ struct MapKey<'a, R: 'a> { de: &'a mut Deserializer, } -macro_rules! deserialize_integer_key { - ($method:ident => $visit:ident) => { - fn $method(self, visitor: V) -> Result - where - V: de::Visitor<'de>, - { - self.de.eat_char(); - self.de.scratch.clear(); - let string = tri!(self.de.read.parse_str(&mut self.de.scratch)); - match (string.parse(), string) { - (Ok(integer), _) => visitor.$visit(integer), - (Err(_), Reference::Borrowed(s)) => visitor.visit_borrowed_str(s), - (Err(_), Reference::Copied(s)) => visitor.visit_str(s), - } - } - }; -} - -macro_rules! deserialize_float_key { +macro_rules! deserialize_numeric_key { ($method:ident) => { fn $method(self, visitor: V) -> Result where @@ -2174,19 +2156,18 @@ where } } - deserialize_integer_key!(deserialize_i8 => visit_i8); - deserialize_integer_key!(deserialize_i16 => visit_i16); - deserialize_integer_key!(deserialize_i32 => visit_i32); - deserialize_integer_key!(deserialize_i64 => visit_i64); - deserialize_integer_key!(deserialize_i128 => visit_i128); - deserialize_integer_key!(deserialize_u8 => visit_u8); - deserialize_integer_key!(deserialize_u16 => visit_u16); - deserialize_integer_key!(deserialize_u32 => visit_u32); - deserialize_integer_key!(deserialize_u64 => visit_u64); - deserialize_integer_key!(deserialize_u128 => visit_u128); - - deserialize_float_key!(deserialize_f32); - deserialize_float_key!(deserialize_f64); + deserialize_numeric_key!(deserialize_i8); + deserialize_numeric_key!(deserialize_i16); + deserialize_numeric_key!(deserialize_i32); + deserialize_numeric_key!(deserialize_i64); + deserialize_numeric_key!(deserialize_i128); + deserialize_numeric_key!(deserialize_u8); + deserialize_numeric_key!(deserialize_u16); + deserialize_numeric_key!(deserialize_u32); + deserialize_numeric_key!(deserialize_u64); + deserialize_numeric_key!(deserialize_u128); + deserialize_numeric_key!(deserialize_f32); + deserialize_numeric_key!(deserialize_f64); #[inline] fn deserialize_option(self, visitor: V) -> Result diff --git a/tests/test.rs b/tests/test.rs index f630330b0..c64d053d1 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -1897,10 +1897,7 @@ fn test_integer_key() { test_parse_ok(vec![(j, map)]); let j = r#"{"x":null}"#; - test_parse_err::>(&[( - j, - "invalid type: string \"x\", expected i32 at line 1 column 4", - )]); + test_parse_err::>(&[(j, "expected value at line 1 column 3")]); } #[test]