From 430ccee5eb38d4b95cdab2491d298ebe21a5811f Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Wed, 20 Dec 2017 15:24:41 +0900 Subject: [PATCH 1/4] Make serde-1.0 default --- Cargo.toml | 5 +++-- src/lib.rs | 25 ++----------------------- 2 files changed, 5 insertions(+), 25 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 2406d81..6a0989b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,8 +25,9 @@ version = "0.3.19" [dependencies.serde] optional = true -version = ">= 0.7.0, < 0.9.0" +version = "1.0" +features = ["derive"] [features] -default = ["rustc-serialize"] +default = ["serde"] unstable = [] diff --git a/src/lib.rs b/src/lib.rs index d85f63a..392f924 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,6 +22,7 @@ extern crate num_traits as traits; extern crate rustc_serialize; #[cfg(feature = "serde")] +#[macro_use] extern crate serde; use std::error::Error; @@ -63,6 +64,7 @@ use traits::{Zero, One, Num, Inv, Float}; /// ``` #[derive(PartialEq, Eq, Copy, Clone, Hash, Debug, Default)] #[cfg_attr(feature = "rustc-serialize", derive(RustcEncodable, RustcDecodable))] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[repr(C)] pub struct Complex { /// Real portion of the complex number @@ -1073,29 +1075,6 @@ impl Num for Complex { } } -#[cfg(feature = "serde")] -impl serde::Serialize for Complex - where T: serde::Serialize -{ - fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> where - S: serde::Serializer - { - (&self.re, &self.im).serialize(serializer) - } -} - -#[cfg(feature = "serde")] -impl serde::Deserialize for Complex where - T: serde::Deserialize + Num + Clone -{ - fn deserialize(deserializer: &mut D) -> Result where - D: serde::Deserializer, - { - let (re, im) = try!(serde::Deserialize::deserialize(deserializer)); - Ok(Complex::new(re, im)) - } -} - #[derive(Debug, PartialEq)] pub struct ParseComplexError { From 29b50d5f82dd6127ba54845b394ac4c65e7dac82 Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Wed, 20 Dec 2017 16:47:23 +0900 Subject: [PATCH 2/4] Use codes in `next` of rust-num/num (manual impl, drop rustc-serialize) --- Cargo.toml | 7 +------ src/lib.rs | 29 +++++++++++++++++++++++------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6a0989b..9416996 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,15 +19,10 @@ version = "0.2.1" default-features = false features = ["std"] -[dependencies.rustc-serialize] -optional = true -version = "0.3.19" - [dependencies.serde] optional = true version = "1.0" -features = ["derive"] [features] -default = ["serde"] +default = [] unstable = [] diff --git a/src/lib.rs b/src/lib.rs index 392f924..18fa4e0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,11 +18,7 @@ extern crate num_traits as traits; -#[cfg(feature = "rustc-serialize")] -extern crate rustc_serialize; - #[cfg(feature = "serde")] -#[macro_use] extern crate serde; use std::error::Error; @@ -63,8 +59,6 @@ use traits::{Zero, One, Num, Inv, Float}; /// } /// ``` #[derive(PartialEq, Eq, Copy, Clone, Hash, Debug, Default)] -#[cfg_attr(feature = "rustc-serialize", derive(RustcEncodable, RustcDecodable))] -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] #[repr(C)] pub struct Complex { /// Real portion of the complex number @@ -1075,6 +1069,29 @@ impl Num for Complex { } } +#[cfg(feature = "serde")] +impl serde::Serialize for Complex + where T: serde::Serialize +{ + fn serialize(&self, serializer: S) -> Result where + S: serde::Serializer + { + (&self.re, &self.im).serialize(serializer) + } +} + +#[cfg(feature = "serde")] +impl<'de, T> serde::Deserialize<'de> for Complex where + T: serde::Deserialize<'de> + Num + Clone +{ + fn deserialize(deserializer: D) -> Result where + D: serde::Deserializer<'de>, + { + let (re, im) = try!(serde::Deserialize::deserialize(deserializer)); + Ok(Complex::new(re, im)) + } +} + #[derive(Debug, PartialEq)] pub struct ParseComplexError { From cee3099c88dc33b6dba7b6d54cfb8a1c7632692c Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Wed, 20 Dec 2017 16:49:19 +0900 Subject: [PATCH 3/4] Update CI test command --- ci/test_full.sh | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/ci/test_full.sh b/ci/test_full.sh index 5521ed5..29eedf6 100755 --- a/ci/test_full.sh +++ b/ci/test_full.sh @@ -12,12 +12,6 @@ cargo test --verbose cargo build --no-default-features cargo test --no-default-features -# Each isolated feature should also work everywhere. -for feature in rustc-serialize serde; do - cargo build --verbose --no-default-features --features="$feature" - cargo test --verbose --no-default-features --features="$feature" -done - -# Downgrade serde and build test the 0.7.0 channel as well -cargo update -p serde --precise 0.7.0 -cargo build --verbose --no-default-features --features "serde" +# It also should build with serde features +cargo build --verbose --no-default-features --features=serde +cargo test --verbose --no-default-features --features=serde From 403357da6c247ca1d2340609d139feb97496ccde Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Tue, 6 Mar 2018 13:33:35 -0800 Subject: [PATCH 4/4] Restore the feature loop in CI We'll probably have rand to test soon too. --- ci/test_full.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ci/test_full.sh b/ci/test_full.sh index 29eedf6..cc1276c 100755 --- a/ci/test_full.sh +++ b/ci/test_full.sh @@ -12,6 +12,8 @@ cargo test --verbose cargo build --no-default-features cargo test --no-default-features -# It also should build with serde features -cargo build --verbose --no-default-features --features=serde -cargo test --verbose --no-default-features --features=serde +# Each isolated feature should also work everywhere. +for feature in serde; do + cargo build --verbose --no-default-features --features="$feature" + cargo test --verbose --no-default-features --features="$feature" +done