Skip to content

Commit 04ff227

Browse files
committed
Conditionally provide impl From<i128> and From<u128> for Number
1 parent 59d7060 commit 04ff227

File tree

3 files changed

+26
-4
lines changed

3 files changed

+26
-4
lines changed

src/number.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,21 @@ macro_rules! impl_from_signed {
740740
impl_from_unsigned!(u8, u16, u32, u64, usize);
741741
impl_from_signed!(i8, i16, i32, i64, isize);
742742

743+
#[cfg(feature = "arbitrary_precision")]
744+
serde_if_integer128! {
745+
impl From<i128> for Number {
746+
fn from(i: i128) -> Self {
747+
Number { n: i.to_string() }
748+
}
749+
}
750+
751+
impl From<u128> for Number {
752+
fn from(u: u128) -> Self {
753+
Number { n: u.to_string() }
754+
}
755+
}
756+
}
757+
743758
impl Number {
744759
#[cfg(not(feature = "arbitrary_precision"))]
745760
// Not public API. Should be pub(crate).

src/value/from.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ from_integer! {
2929
u8 u16 u32 u64 usize
3030
}
3131

32+
#[cfg(feature = "arbitrary_precision")]
33+
serde_if_integer128! {
34+
from_integer! {
35+
i128 u128
36+
}
37+
}
38+
3239
impl From<f32> for Value {
3340
/// Convert 32-bit floating point number to `Value`
3441
///

src/value/ser.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@ impl serde::Serializer for Serializer {
7777
Ok(Value::Number(value.into()))
7878
}
7979

80+
#[cfg(feature = "arbitrary_precision")]
8081
serde_if_integer128! {
81-
#[cfg(feature = "arbitrary_precision")]
8282
fn serialize_i128(self, value: i128) -> Result<Value, Error> {
83-
Ok(Value::Number(Number::from_string_unchecked(value.to_string())))
83+
Ok(Value::Number(value.into()))
8484
}
8585
}
8686

@@ -104,10 +104,10 @@ impl serde::Serializer for Serializer {
104104
Ok(Value::Number(value.into()))
105105
}
106106

107+
#[cfg(feature = "arbitrary_precision")]
107108
serde_if_integer128! {
108-
#[cfg(feature = "arbitrary_precision")]
109109
fn serialize_u128(self, value: u128) -> Result<Value, Error> {
110-
Ok(Value::Number(Number::from_string_unchecked(value.to_string())))
110+
Ok(Value::Number(value.into()))
111111
}
112112
}
113113

0 commit comments

Comments
 (0)