Skip to content

Commit

Permalink
Conditionally provide impl From<i128> and From<u128> for Number
Browse files Browse the repository at this point in the history
  • Loading branch information
dtolnay committed Dec 31, 2018
1 parent 59d7060 commit 04ff227
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 4 deletions.
15 changes: 15 additions & 0 deletions src/number.rs
Original file line number Diff line number Diff line change
Expand Up @@ -740,6 +740,21 @@ macro_rules! impl_from_signed {
impl_from_unsigned!(u8, u16, u32, u64, usize);
impl_from_signed!(i8, i16, i32, i64, isize);

#[cfg(feature = "arbitrary_precision")]
serde_if_integer128! {
impl From<i128> for Number {
fn from(i: i128) -> Self {
Number { n: i.to_string() }
}
}

impl From<u128> for Number {
fn from(u: u128) -> Self {
Number { n: u.to_string() }
}
}
}

impl Number {
#[cfg(not(feature = "arbitrary_precision"))]
// Not public API. Should be pub(crate).
Expand Down
7 changes: 7 additions & 0 deletions src/value/from.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,13 @@ from_integer! {
u8 u16 u32 u64 usize
}

#[cfg(feature = "arbitrary_precision")]
serde_if_integer128! {
from_integer! {
i128 u128
}
}

impl From<f32> for Value {
/// Convert 32-bit floating point number to `Value`
///
Expand Down
8 changes: 4 additions & 4 deletions src/value/ser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,10 @@ impl serde::Serializer for Serializer {
Ok(Value::Number(value.into()))
}

#[cfg(feature = "arbitrary_precision")]
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())))
Ok(Value::Number(value.into()))
}
}

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

#[cfg(feature = "arbitrary_precision")]
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())))
Ok(Value::Number(value.into()))
}
}

Expand Down

0 comments on commit 04ff227

Please sign in to comment.