Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: serde 1.0 #305

Merged
merged 5 commits into from
Jun 22, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bigint/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ version = "0.3.19"

[dependencies.serde]
optional = true
version = ">= 0.7.0, < 0.9.0"
version = "1"

[dev-dependencies.rand]
version = "0.3.14"
Expand Down
20 changes: 11 additions & 9 deletions bigint/src/bigint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ impl Mul<Sign> for Sign {

#[cfg(feature = "serde")]
impl serde::Serialize for Sign {
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error>
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: serde::Serializer
{
match *self {
Expand All @@ -82,9 +82,9 @@ impl serde::Serialize for Sign {
}

#[cfg(feature = "serde")]
impl serde::Deserialize for Sign {
fn deserialize<D>(deserializer: &mut D) -> Result<Self, D::Error>
where D: serde::Deserializer
impl<'de> serde::Deserialize<'de> for Sign {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: serde::Deserializer<'de>
{
use serde::de::Error;

Expand All @@ -93,7 +93,9 @@ impl serde::Deserialize for Sign {
-1 => Ok(Sign::Minus),
0 => Ok(Sign::NoSign),
1 => Ok(Sign::Plus),
_ => Err(D::Error::invalid_value("sign must be -1, 0, or 1")),
_ => Err(D::Error::invalid_value(
serde::de::Unexpected::Signed(sign as i64),
&"sign must be -1, 0, or 1")),
}
}
}
Expand Down Expand Up @@ -753,17 +755,17 @@ impl From<BigUint> for BigInt {

#[cfg(feature = "serde")]
impl serde::Serialize for BigInt {
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error>
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: serde::Serializer
{
(self.sign, &self.data).serialize(serializer)
}
}

#[cfg(feature = "serde")]
impl serde::Deserialize for BigInt {
fn deserialize<D>(deserializer: &mut D) -> Result<Self, D::Error>
where D: serde::Deserializer
impl<'de> serde::Deserialize<'de> for BigInt {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: serde::Deserializer<'de>
{
let (sign, data) = try!(serde::Deserialize::deserialize(deserializer));
Ok(BigInt {
Expand Down
8 changes: 4 additions & 4 deletions bigint/src/biguint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1073,17 +1073,17 @@ impl BigUint {

#[cfg(feature = "serde")]
impl serde::Serialize for BigUint {
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error>
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: serde::Serializer
{
self.data.serialize(serializer)
}
}

#[cfg(feature = "serde")]
impl serde::Deserialize for BigUint {
fn deserialize<D>(deserializer: &mut D) -> Result<Self, D::Error>
where D: serde::Deserializer
impl<'de> serde::Deserialize<'de> for BigUint {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: serde::Deserializer<'de>
{
let data = try!(Vec::deserialize(deserializer));
Ok(BigUint { data: data })
Expand Down
9 changes: 2 additions & 7 deletions ci/test_full.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,11 @@ for feature in '' bigint rational complex; do
cargo test --verbose --no-default-features --features="$feature"
done

# Build test for the serde feature
cargo build --verbose --features "serde"
if [ "$TRAVIS_RUST_VERSION" = 1.8.0 ]; then exit; fi

# Downgrade serde and build test the 0.7.0 channel as well
cargo update -p serde --precise 0.7.0
# Build test for the serde feature
cargo build --verbose --features "serde"


if [ "$TRAVIS_RUST_VERSION" = 1.8.0 ]; then exit; fi

# num-derive should build on 1.15.0+
cargo build --verbose --manifest-path=derive/Cargo.toml

Expand Down
2 changes: 1 addition & 1 deletion complex/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ version = "0.3.19"

[dependencies.serde]
optional = true
version = ">= 0.7.0, < 0.9.0"
version = "1"

[features]
default = ["rustc-serialize"]
Expand Down
10 changes: 5 additions & 5 deletions complex/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -744,19 +744,19 @@ impl<T> fmt::Binary for Complex<T> where
impl<T> serde::Serialize for Complex<T>
where T: serde::Serialize
{
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error> where
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where
S: serde::Serializer
{
(&self.re, &self.im).serialize(serializer)
}
}

#[cfg(feature = "serde")]
impl<T> serde::Deserialize for Complex<T> where
T: serde::Deserialize + Num + Clone
impl<'de, T> serde::Deserialize<'de> for Complex<T> where
T: serde::Deserialize<'de> + Num + Clone
{
fn deserialize<D>(deserializer: &mut D) -> Result<Self, D::Error> where
D: serde::Deserializer,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where
D: serde::Deserializer<'de>,
{
let (re, im) = try!(serde::Deserialize::deserialize(deserializer));
Ok(Complex::new(re, im))
Expand Down
2 changes: 1 addition & 1 deletion rational/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ version = "0.3.19"

[dependencies.serde]
optional = true
version = ">= 0.7.0, < 0.9.0"
version = "1"

[features]
default = ["bigint", "rustc-serialize"]
Expand Down
14 changes: 8 additions & 6 deletions rational/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -612,23 +612,25 @@ impl<T> Into<(T, T)> for Ratio<T> {
impl<T> serde::Serialize for Ratio<T>
where T: serde::Serialize + Clone + Integer + PartialOrd
{
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error>
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: serde::Serializer
{
(self.numer(), self.denom()).serialize(serializer)
}
}

#[cfg(feature = "serde")]
impl<T> serde::Deserialize for Ratio<T>
where T: serde::Deserialize + Clone + Integer + PartialOrd
impl<'de, T> serde::Deserialize<'de> for Ratio<T>
where T: serde::Deserialize<'de> + Clone + Integer + PartialOrd
{
fn deserialize<D>(deserializer: &mut D) -> Result<Self, D::Error>
where D: serde::Deserializer
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: serde::Deserializer<'de>
{
let (numer, denom): (T,T) = try!(serde::Deserialize::deserialize(deserializer));
if denom.is_zero() {
Err(serde::de::Error::invalid_value("denominator is zero"))
Err(serde::de::Error::invalid_value(
serde::de::Unexpected::Unsigned(0),
&"denominator should be non-zero"))
} else {
Ok(Ratio::new_raw(numer, denom))
}
Expand Down