diff --git a/src/de.rs b/src/de.rs index b4c5ef7dc..bf103f04b 100644 --- a/src/de.rs +++ b/src/de.rs @@ -864,6 +864,15 @@ impl<'de, R: Read<'de>> Deserializer { buf.push('-'); } self.scan_integer(&mut buf)?; + if positive { + if let Ok(unsigned) = buf.parse() { + return Ok(ParserNumber::U64(unsigned)); + } + } else { + if let Ok(signed) = buf.parse() { + return Ok(ParserNumber::I64(signed)); + } + } Ok(ParserNumber::String(buf)) } diff --git a/tests/test.rs b/tests/test.rs index 054e96088..bfcb5290f 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -715,11 +715,7 @@ fn test_parse_char() { ), ( "10", - if cfg!(feature = "arbitrary_precision") { - "invalid type: number, expected a character at line 1 column 2" - } else { - "invalid type: integer `10`, expected a character at line 1 column 2" - }, + "invalid type: integer `10`, expected a character at line 1 column 2", ), ]); @@ -1203,11 +1199,7 @@ fn test_parse_struct() { test_parse_err::(&[ ( "5", - if cfg!(feature = "arbitrary_precision") { - "invalid type: number, expected struct Outer at line 1 column 1" - } else { - "invalid type: integer `5`, expected struct Outer at line 1 column 1" - }, + "invalid type: integer `5`, expected struct Outer at line 1 column 1", ), ( "\"hello\"",