From 0215da2d291260019116aeb318f8941e8fd1c4d3 Mon Sep 17 00:00:00 2001 From: Justin Starry Date: Sat, 19 Oct 2019 19:51:34 -0400 Subject: [PATCH] Fix emscripten build failures due to lack of i128 support --- Cargo.toml | 11 ++++------- build.rs | 8 -------- src/de/mod.rs | 25 ++----------------------- src/lib.rs | 2 +- src/ser/mod.rs | 22 ++-------------------- tests/test.rs | 26 ++++++++++++++------------ 6 files changed, 23 insertions(+), 71 deletions(-) delete mode 100644 build.rs diff --git a/Cargo.toml b/Cargo.toml index 6d73121..6ac80ab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,6 @@ documentation = "https://docs.rs/bincode" readme = "./readme.md" categories = ["encoding", "network-programming"] keywords = ["binary", "encode", "decode", "serialize", "deserialize"] -build = "build.rs" license = "MIT" description = "A binary serialization / deserialization strategy that uses Serde for transforming structs into bytes and vice versa!" @@ -24,13 +23,11 @@ serde = "1.0.63" serde_bytes = "0.11" serde_derive = "1.0.27" -[build-dependencies] -autocfg = "0.1.2" - [features] -# This feature is no longer used and is DEPRECATED. This crate now -# automatically enables i128 support for Rust compilers that support it. The -# feature will be removed if and when a new major version is released. +# This feature is no longer used and is DEPRECATED. This crate relies on the +# serde `serde_if_integer128` macro to enable i128 support for Rust compilers +# and targets that support it. The feature will be removed if and when a new +# major version is released. i128 = [] [badges] diff --git a/build.rs b/build.rs deleted file mode 100644 index 4afe096..0000000 --- a/build.rs +++ /dev/null @@ -1,8 +0,0 @@ -extern crate autocfg; - -fn main() { - autocfg::rerun_path(file!()); - - let ac = autocfg::new(); - ac.emit_has_type("i128"); -} diff --git a/src/de/mod.rs b/src/de/mod.rs index efe1161..00f672d 100644 --- a/src/de/mod.rs +++ b/src/de/mod.rs @@ -108,30 +108,9 @@ where impl_nums!(f32, deserialize_f32, visit_f32, read_f32); impl_nums!(f64, deserialize_f64, visit_f64, read_f64); - #[cfg(has_i128)] - impl_nums!(u128, deserialize_u128, visit_u128, read_u128); - - #[cfg(has_i128)] - impl_nums!(i128, deserialize_i128, visit_i128, read_i128); - serde_if_integer128! { - #[cfg(not(has_i128))] - fn deserialize_u128(self, visitor: V) -> Result - where - V: serde::de::Visitor<'de> - { - let _ = visitor; - Err(DeError::custom("u128 is not supported. Use Rustc ≥ 1.26.")) - } - - #[cfg(not(has_i128))] - fn deserialize_i128(self, visitor: V) -> Result - where - V: serde::de::Visitor<'de> - { - let _ = visitor; - Err(DeError::custom("i128 is not supported. Use Rustc ≥ 1.26.")) - } + impl_nums!(u128, deserialize_u128, visit_u128, read_u128); + impl_nums!(i128, deserialize_i128, visit_i128, read_i128); } #[inline] diff --git a/src/lib.rs b/src/lib.rs index ed8e327..343e0a8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -21,7 +21,7 @@ //! ### 128bit numbers //! //! Support for `i128` and `u128` is automatically enabled on Rust toolchains -//! greater than or equal to `1.26.0`. +//! greater than or equal to `1.26.0` and disabled for targets which do not support it #![doc(html_root_url = "https://docs.rs/bincode/1.2.0")] #![crate_name = "bincode"] diff --git a/src/ser/mod.rs b/src/ser/mod.rs index 4604c3e..737c80d 100644 --- a/src/ser/mod.rs +++ b/src/ser/mod.rs @@ -88,31 +88,13 @@ impl<'a, W: Write, O: Options> serde::Serializer for &'a mut Serializer { self.writer.write_i64::(v).map_err(Into::into) } - #[cfg(has_i128)] - fn serialize_u128(self, v: u128) -> Result<()> { - self.writer.write_u128::(v).map_err(Into::into) - } - - #[cfg(has_i128)] - fn serialize_i128(self, v: i128) -> Result<()> { - self.writer.write_i128::(v).map_err(Into::into) - } - serde_if_integer128! { - #[cfg(not(has_i128))] fn serialize_u128(self, v: u128) -> Result<()> { - use serde::ser::Error; - - let _ = v; - Err(Error::custom("u128 is not supported. Use Rustc ≥ 1.26.")) + self.writer.write_u128::(v).map_err(Into::into) } - #[cfg(not(has_i128))] fn serialize_i128(self, v: i128) -> Result<()> { - use serde::ser::Error; - - let _ = v; - Err(Error::custom("i128 is not supported. Use Rustc ≥ 1.26.")) + self.writer.write_i128::(v).map_err(Into::into) } } diff --git a/tests/test.rs b/tests/test.rs index 3373525..e64138a 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -3,6 +3,7 @@ extern crate serde_derive; extern crate bincode; extern crate byteorder; +#[macro_use] extern crate serde; extern crate serde_bytes; @@ -72,18 +73,19 @@ fn test_numbers() { the_same(5f64); } -#[cfg(has_i128)] -#[test] -fn test_numbers_128bit() { - // unsigned positive - the_same(5u128); - the_same(u128::max_value()); - // signed positive - the_same(5i128); - the_same(i128::max_value()); - // signed negative - the_same(-5i128); - the_same(i128::min_value()); +serde_if_integer128! { + #[test] + fn test_numbers_128bit() { + // unsigned positive + the_same(5u128); + the_same(u128::max_value()); + // signed positive + the_same(5i128); + the_same(i128::max_value()); + // signed negative + the_same(-5i128); + the_same(i128::min_value()); + } } #[test]