Fix serialization of i128 and u128 types
Signed-off-by: koushiro <koushiro.cqx@gmail.com>
This commit is contained in:
parent
32f1568c2a
commit
f69e1ffe3f
@ -77,6 +77,13 @@ impl serde::Serializer for Serializer {
|
||||
Ok(Value::Number(value.into()))
|
||||
}
|
||||
|
||||
serde_if_integer128! {
|
||||
#[cfg(feature = "arbitrary_precision")]
|
||||
fn serialize_i128(self, value: i128) -> Result<Value, Error> {
|
||||
Ok(Value::Number(Number::from_string_unchecked(value.to_string())))
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn serialize_u8(self, value: u8) -> Result<Value, Error> {
|
||||
self.serialize_u64(value as u64)
|
||||
@ -97,6 +104,13 @@ impl serde::Serializer for Serializer {
|
||||
Ok(Value::Number(value.into()))
|
||||
}
|
||||
|
||||
serde_if_integer128! {
|
||||
#[cfg(feature = "arbitrary_precision")]
|
||||
fn serialize_u128(self, value: u128) -> Result<Value, Error> {
|
||||
Ok(Value::Number(Number::from_string_unchecked(value.to_string())))
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn serialize_f32(self, value: f32) -> Result<Value, Error> {
|
||||
self.serialize_f64(value as f64)
|
||||
|
||||
@ -1909,6 +1909,28 @@ fn test_partialeq_number() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(integer128)]
|
||||
#[cfg(feature = "arbitrary_precision")]
|
||||
fn test_partialeq_integer128() {
|
||||
use std::{u128, i128};
|
||||
use std::str::FromStr;
|
||||
fn test_u128_number_partial_eq(input: u128) {
|
||||
let val1 = serde_json::Value::from_str(&format!("{}", input)).unwrap();
|
||||
let val2 = serde_json::to_value(input).unwrap();
|
||||
assert_eq!(val1, val2);
|
||||
}
|
||||
fn test_i128_number_partial_eq(input: i128) {
|
||||
let val1 = serde_json::Value::from_str(&format!("{}", input)).unwrap();
|
||||
let val2 = serde_json::to_value(input).unwrap();
|
||||
assert_eq!(val1, val2);
|
||||
}
|
||||
test_u128_number_partial_eq(u128::MAX);
|
||||
test_u128_number_partial_eq(u128::MIN);
|
||||
test_i128_number_partial_eq(i128::MAX);
|
||||
test_i128_number_partial_eq(i128::MIN);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_partialeq_string() {
|
||||
let v = to_value("42").unwrap();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user