From 0ff4882cab2afe7f45d9d57d3f69564b36f0af4e Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 26 May 2018 15:15:07 -0700 Subject: [PATCH 1/2] Implement IntoDeserializer for i128 and u128 --- serde/src/de/value.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/serde/src/de/value.rs b/serde/src/de/value.rs index 101531b3..d08bae3b 100644 --- a/serde/src/de/value.rs +++ b/serde/src/de/value.rs @@ -218,6 +218,11 @@ primitive_deserializer!(f32, "an `f32`.", F32Deserializer, visit_f32); primitive_deserializer!(f64, "an `f64`.", F64Deserializer, visit_f64); primitive_deserializer!(char, "a `char`.", CharDeserializer, visit_char); +serde_if_integer128! { + primitive_deserializer!(i128, "an `i128`.", I128Deserializer, visit_i128); + primitive_deserializer!(u128, "a `u128`.", U128Deserializer, visit_u128); +} + /// A deserializer holding a `u32`. #[derive(Clone, Debug)] pub struct U32Deserializer { From ea118e11a01876dd3123e72be193beda3b8eee10 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 26 May 2018 15:21:37 -0700 Subject: [PATCH 2/2] Test the 128-bit IntoDeserializer impls --- test_suite/tests/test_value.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test_suite/tests/test_value.rs b/test_suite/tests/test_value.rs index acd3ddd6..80554663 100644 --- a/test_suite/tests/test_value.rs +++ b/test_suite/tests/test_value.rs @@ -25,3 +25,21 @@ fn test_u32_to_enum() { let e: E = E::deserialize(deserializer).unwrap(); assert_eq!(E::B, e); } + +#[test] +fn test_integer128() { + let de_u128 = IntoDeserializer::::into_deserializer(1u128); + let de_i128 = IntoDeserializer::::into_deserializer(1i128); + + // u128 to u128 + assert_eq!(1u128, u128::deserialize(de_u128.clone()).unwrap()); + + // u128 to i128 + assert_eq!(1i128, i128::deserialize(de_u128.clone()).unwrap()); + + // i128 to u128 + assert_eq!(1u128, u128::deserialize(de_i128.clone()).unwrap()); + + // i128 to i128 + assert_eq!(1i128, i128::deserialize(de_i128.clone()).unwrap()); +}