Skip to content

Commit 37e76e0

Browse files
committed
Assume serde_if_integer128 is true
1 parent ec0456a commit 37e76e0

File tree

6 files changed

+138
-197
lines changed

6 files changed

+138
-197
lines changed

src/de.rs

Lines changed: 67 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use core::marker::PhantomData;
1414
use core::result;
1515
use core::str::FromStr;
1616
use serde::de::{self, Expected, Unexpected};
17-
use serde::{forward_to_deserialize_any, serde_if_integer128};
17+
use serde::forward_to_deserialize_any;
1818

1919
#[cfg(feature = "arbitrary_precision")]
2020
use crate::number::NumberDeserializer;
@@ -335,31 +335,25 @@ impl<'de, R: Read<'de>> Deserializer<R> {
335335
}
336336
}
337337

338-
serde_if_integer128! {
339-
fn scan_integer128(&mut self, buf: &mut String) -> Result<()> {
340-
match tri!(self.next_char_or_null()) {
341-
b'0' => {
342-
buf.push('0');
343-
// There can be only one leading '0'.
344-
match tri!(self.peek_or_null()) {
345-
b'0'..=b'9' => {
346-
Err(self.peek_error(ErrorCode::InvalidNumber))
347-
}
348-
_ => Ok(()),
349-
}
338+
fn scan_integer128(&mut self, buf: &mut String) -> Result<()> {
339+
match tri!(self.next_char_or_null()) {
340+
b'0' => {
341+
buf.push('0');
342+
// There can be only one leading '0'.
343+
match tri!(self.peek_or_null()) {
344+
b'0'..=b'9' => Err(self.peek_error(ErrorCode::InvalidNumber)),
345+
_ => Ok(()),
350346
}
351-
c @ b'1'..=b'9' => {
347+
}
348+
c @ b'1'..=b'9' => {
349+
buf.push(c as char);
350+
while let c @ b'0'..=b'9' = tri!(self.peek_or_null()) {
351+
self.eat_char();
352352
buf.push(c as char);
353-
while let c @ b'0'..=b'9' = tri!(self.peek_or_null()) {
354-
self.eat_char();
355-
buf.push(c as char);
356-
}
357-
Ok(())
358-
}
359-
_ => {
360-
Err(self.error(ErrorCode::InvalidNumber))
361353
}
354+
Ok(())
362355
}
356+
_ => Err(self.error(ErrorCode::InvalidNumber)),
363357
}
364358
}
365359

@@ -1437,67 +1431,65 @@ impl<'de, 'a, R: Read<'de>> de::Deserializer<'de> for &'a mut Deserializer<R> {
14371431
val
14381432
}
14391433

1440-
serde_if_integer128! {
1441-
fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value>
1442-
where
1443-
V: de::Visitor<'de>,
1444-
{
1445-
let mut buf = String::new();
1446-
1447-
match tri!(self.parse_whitespace()) {
1448-
Some(b'-') => {
1449-
self.eat_char();
1450-
buf.push('-');
1451-
}
1452-
Some(_) => {}
1453-
None => {
1454-
return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1455-
}
1456-
};
1434+
fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value>
1435+
where
1436+
V: de::Visitor<'de>,
1437+
{
1438+
let mut buf = String::new();
14571439

1458-
tri!(self.scan_integer128(&mut buf));
1440+
match tri!(self.parse_whitespace()) {
1441+
Some(b'-') => {
1442+
self.eat_char();
1443+
buf.push('-');
1444+
}
1445+
Some(_) => {}
1446+
None => {
1447+
return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1448+
}
1449+
};
14591450

1460-
let value = match buf.parse() {
1461-
Ok(int) => visitor.visit_i128(int),
1462-
Err(_) => {
1463-
return Err(self.error(ErrorCode::NumberOutOfRange));
1464-
}
1465-
};
1451+
tri!(self.scan_integer128(&mut buf));
14661452

1467-
match value {
1468-
Ok(value) => Ok(value),
1469-
Err(err) => Err(self.fix_position(err)),
1453+
let value = match buf.parse() {
1454+
Ok(int) => visitor.visit_i128(int),
1455+
Err(_) => {
1456+
return Err(self.error(ErrorCode::NumberOutOfRange));
14701457
}
1458+
};
1459+
1460+
match value {
1461+
Ok(value) => Ok(value),
1462+
Err(err) => Err(self.fix_position(err)),
14711463
}
1464+
}
14721465

1473-
fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value>
1474-
where
1475-
V: de::Visitor<'de>,
1476-
{
1477-
match tri!(self.parse_whitespace()) {
1478-
Some(b'-') => {
1479-
return Err(self.peek_error(ErrorCode::NumberOutOfRange));
1480-
}
1481-
Some(_) => {}
1482-
None => {
1483-
return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1484-
}
1466+
fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value>
1467+
where
1468+
V: de::Visitor<'de>,
1469+
{
1470+
match tri!(self.parse_whitespace()) {
1471+
Some(b'-') => {
1472+
return Err(self.peek_error(ErrorCode::NumberOutOfRange));
14851473
}
1474+
Some(_) => {}
1475+
None => {
1476+
return Err(self.peek_error(ErrorCode::EofWhileParsingValue));
1477+
}
1478+
}
14861479

1487-
let mut buf = String::new();
1488-
tri!(self.scan_integer128(&mut buf));
1489-
1490-
let value = match buf.parse() {
1491-
Ok(int) => visitor.visit_u128(int),
1492-
Err(_) => {
1493-
return Err(self.error(ErrorCode::NumberOutOfRange));
1494-
}
1495-
};
1480+
let mut buf = String::new();
1481+
tri!(self.scan_integer128(&mut buf));
14961482

1497-
match value {
1498-
Ok(value) => Ok(value),
1499-
Err(err) => Err(self.fix_position(err)),
1483+
let value = match buf.parse() {
1484+
Ok(int) => visitor.visit_u128(int),
1485+
Err(_) => {
1486+
return Err(self.error(ErrorCode::NumberOutOfRange));
15001487
}
1488+
};
1489+
1490+
match value {
1491+
Ok(value) => Ok(value),
1492+
Err(err) => Err(self.fix_position(err)),
15011493
}
15021494
}
15031495

@@ -2164,15 +2156,12 @@ where
21642156
deserialize_integer_key!(deserialize_i16 => visit_i16);
21652157
deserialize_integer_key!(deserialize_i32 => visit_i32);
21662158
deserialize_integer_key!(deserialize_i64 => visit_i64);
2159+
deserialize_integer_key!(deserialize_i128 => visit_i128);
21672160
deserialize_integer_key!(deserialize_u8 => visit_u8);
21682161
deserialize_integer_key!(deserialize_u16 => visit_u16);
21692162
deserialize_integer_key!(deserialize_u32 => visit_u32);
21702163
deserialize_integer_key!(deserialize_u64 => visit_u64);
2171-
2172-
serde_if_integer128! {
2173-
deserialize_integer_key!(deserialize_i128 => visit_i128);
2174-
deserialize_integer_key!(deserialize_u128 => visit_u128);
2175-
}
2164+
deserialize_integer_key!(deserialize_u128 => visit_u128);
21762165

21772166
#[inline]
21782167
fn deserialize_option<V>(self, visitor: V) -> Result<V::Value>

src/number.rs

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@ use core::hash::{Hash, Hasher};
1212
use serde::de::{self, Unexpected, Visitor};
1313
#[cfg(feature = "arbitrary_precision")]
1414
use serde::de::{IntoDeserializer, MapAccess};
15-
use serde::{
16-
forward_to_deserialize_any, serde_if_integer128, Deserialize, Deserializer, Serialize,
17-
Serializer,
18-
};
15+
use serde::{forward_to_deserialize_any, Deserialize, Deserializer, Serialize, Serializer};
1916

2017
#[cfg(feature = "arbitrary_precision")]
2118
pub(crate) const TOKEN: &str = "$serde_json::private::Number";
@@ -540,18 +537,15 @@ impl<'de> Deserializer<'de> for Number {
540537
deserialize_number!(deserialize_i16 => visit_i16);
541538
deserialize_number!(deserialize_i32 => visit_i32);
542539
deserialize_number!(deserialize_i64 => visit_i64);
540+
deserialize_number!(deserialize_i128 => visit_i128);
543541
deserialize_number!(deserialize_u8 => visit_u8);
544542
deserialize_number!(deserialize_u16 => visit_u16);
545543
deserialize_number!(deserialize_u32 => visit_u32);
546544
deserialize_number!(deserialize_u64 => visit_u64);
545+
deserialize_number!(deserialize_u128 => visit_u128);
547546
deserialize_number!(deserialize_f32 => visit_f32);
548547
deserialize_number!(deserialize_f64 => visit_f64);
549548

550-
serde_if_integer128! {
551-
deserialize_number!(deserialize_i128 => visit_i128);
552-
deserialize_number!(deserialize_u128 => visit_u128);
553-
}
554-
555549
forward_to_deserialize_any! {
556550
bool char str string bytes byte_buf option unit unit_struct
557551
newtype_struct seq tuple tuple_struct map struct enum identifier
@@ -568,18 +562,15 @@ impl<'de, 'a> Deserializer<'de> for &'a Number {
568562
deserialize_number!(deserialize_i16 => visit_i16);
569563
deserialize_number!(deserialize_i32 => visit_i32);
570564
deserialize_number!(deserialize_i64 => visit_i64);
565+
deserialize_number!(deserialize_i128 => visit_i128);
571566
deserialize_number!(deserialize_u8 => visit_u8);
572567
deserialize_number!(deserialize_u16 => visit_u16);
573568
deserialize_number!(deserialize_u32 => visit_u32);
574569
deserialize_number!(deserialize_u64 => visit_u64);
570+
deserialize_number!(deserialize_u128 => visit_u128);
575571
deserialize_number!(deserialize_f32 => visit_f32);
576572
deserialize_number!(deserialize_f64 => visit_f64);
577573

578-
serde_if_integer128! {
579-
deserialize_number!(deserialize_i128 => visit_i128);
580-
deserialize_number!(deserialize_u128 => visit_u128);
581-
}
582-
583574
forward_to_deserialize_any! {
584575
bool char str string bytes byte_buf option unit unit_struct
585576
newtype_struct seq tuple tuple_struct map struct enum identifier
@@ -731,10 +722,9 @@ impl_from_unsigned!(u8, u16, u32, u64, usize);
731722
impl_from_signed!(i8, i16, i32, i64, isize);
732723

733724
#[cfg(feature = "arbitrary_precision")]
734-
serde_if_integer128! {
735-
impl_from_unsigned!(u128);
736-
impl_from_signed!(i128);
737-
}
725+
impl_from_unsigned!(u128);
726+
#[cfg(feature = "arbitrary_precision")]
727+
impl_from_signed!(i128);
738728

739729
impl Number {
740730
#[cfg(not(feature = "arbitrary_precision"))]

0 commit comments

Comments
 (0)