diff --git a/ethkey/src/signature.rs b/ethkey/src/signature.rs index eec0fbf47..e1afb3940 100644 --- a/ethkey/src/signature.rs +++ b/ethkey/src/signature.rs @@ -25,7 +25,6 @@ use bigint::hash::{H520, H256, FixedHash}; use {Secret, Public, SECP256K1, Error, Message, public_to_address, Address}; #[repr(C)] -#[derive(Eq)] pub struct Signature([u8; 65]); impl Signature { @@ -76,6 +75,9 @@ impl PartialEq for Signature { } } +// manual implementation required in Rust 1.13+, see `std::cmp::AssertParamIsEq`. +impl Eq for Signature { } + // also manual for the same reason, but the pretty printing might be useful. impl fmt::Debug for Signature { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> { diff --git a/rpc/src/v1/types/hash.rs b/rpc/src/v1/types/hash.rs index 3080aa031..3db0cf124 100644 --- a/rpc/src/v1/types/hash.rs +++ b/rpc/src/v1/types/hash.rs @@ -25,9 +25,10 @@ use util::{H64 as Eth64, H160 as Eth160, H256 as Eth256, H520 as Eth520, H512 as macro_rules! impl_hash { ($name: ident, $other: ident, $size: expr) => { /// Hash serialization - #[derive(Eq)] pub struct $name([u8; $size]); + impl Eq for $name { } + impl Default for $name { fn default() -> Self { $name([0; $size]) diff --git a/rpc/src/v1/types/uint.rs b/rpc/src/v1/types/uint.rs index 9be7b1170..ce0fa49a2 100644 --- a/rpc/src/v1/types/uint.rs +++ b/rpc/src/v1/types/uint.rs @@ -23,9 +23,11 @@ use util::{U256 as EthU256, Uint}; macro_rules! impl_uint { ($name: ident, $other: ident, $size: expr) => { /// Uint serialization. - #[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash)] + #[derive(Debug, Default, Clone, Copy, PartialEq, Hash)] pub struct $name($other); + impl Eq for $name { } + impl From for $name where $other: From { fn from(o: T) -> Self { $name($other::from(o))