diff --git a/substrate/core/sr-primitives/src/lib.rs b/substrate/core/sr-primitives/src/lib.rs index d442196463e921e67a153c3eea1079ad7eb66ba9..0a8a60b2541109408c9f63a5fea8043cd9ac4fc7 100644 --- a/substrate/core/sr-primitives/src/lib.rs +++ b/substrate/core/sr-primitives/src/lib.rs @@ -37,7 +37,8 @@ extern crate num_traits; extern crate integer_sqrt; extern crate sr_std as rstd; extern crate sr_io as runtime_io; -extern crate parity_codec as codec; +#[doc(hidden)] +pub extern crate parity_codec as codec; extern crate substrate_primitives; #[cfg(test)] @@ -250,8 +251,6 @@ macro_rules! impl_outer_config { /// Generated enum is binary-compatible with and could be interpreted /// as `generic::DigestItem`. /// -/// Requires `use runtime_primitives::generic;` to be used. -/// /// Runtime requirements: /// 1) binary representation of all supported 'system' log items should stay /// the same. Otherwise, the native code will be unable to read log items @@ -293,53 +292,55 @@ macro_rules! impl_outer_log { /// `self` is a 'system' log && it has been marked as 'system' in macro call. /// Otherwise, None is returned. #[allow(unreachable_patterns)] - fn dref<'a>(&'a self) -> Option<generic::DigestItemRef<'a, $($genarg),*>> { + fn dref<'a>(&'a self) -> Option<$crate::generic::DigestItemRef<'a, $($genarg),*>> { match self.0 { $($( $internal::$module($module::RawLog::$item(ref v)) => - Some(generic::DigestItemRef::$item(v)), + Some($crate::generic::DigestItemRef::$item(v)), )*)* _ => None, } } } - impl From<generic::DigestItem<$($genarg),*>> for $name { + impl From<$crate::generic::DigestItem<$($genarg),*>> for $name { /// Converts `generic::DigestItem` into `$name`. If `generic::DigestItem` represents /// a system item which is supported by the runtime, it is returned. /// Otherwise we expect a `Other` log item. Trying to convert from anything other /// will lead to panic in runtime, since the runtime does not supports this 'system' /// log item. #[allow(unreachable_patterns)] - fn from(gen: generic::DigestItem<$($genarg),*>) -> Self { + fn from(gen: $crate::generic::DigestItem<$($genarg),*>) -> Self { match gen { $($( - generic::DigestItem::$item(value) => + $crate::generic::DigestItem::$item(value) => $name($internal::$module($module::RawLog::$item(value))), )*)* _ => gen.as_other() - .and_then(|value| Decode::decode(&mut &value[..])) + .and_then(|value| $crate::codec::Decode::decode(&mut &value[..])) .map($name) .expect("not allowed to fail in runtime"), } } } - impl Decode for $name { + impl $crate::codec::Decode for $name { /// `generic::DigestItem` binray compatible decode. - fn decode<I: Input>(input: &mut I) -> Option<Self> { - let gen: generic::DigestItem<$($genarg),*> = Decode::decode(input)?; + fn decode<I: $crate::codec::Input>(input: &mut I) -> Option<Self> { + let gen: $crate::generic::DigestItem<$($genarg),*> = + $crate::codec::Decode::decode(input)?; Some($name::from(gen)) } } - impl Encode for $name { + impl $crate::codec::Encode for $name { /// `generic::DigestItem` binray compatible encode. fn encode(&self) -> Vec<u8> { match self.dref() { Some(dref) => dref.encode(), None => { - let gen: generic::DigestItem<$($genarg),*> = generic::DigestItem::Other(self.0.encode()); + let gen: $crate::generic::DigestItem<$($genarg),*> = + $crate::generic::DigestItem::Other(self.0.encode()); gen.encode() }, } @@ -367,12 +368,12 @@ macro_rules! impl_outer_log { #[cfg(test)] mod tests { use substrate_primitives::hash::H256; - use codec::{Encode, Decode, Input}; + use codec::{Encode as EncodeHidden, Decode as DecodeHidden}; pub trait RuntimeT { type AuthorityId; } - + pub struct Runtime; impl RuntimeT for Runtime { @@ -397,8 +398,6 @@ mod tests { pub enum RawLog<AuthorityId> { B1(AuthorityId), B2(AuthorityId) } } - use super::generic; // required before macro invocation - // TODO try to avoid redundant brackets: a(AuthoritiesChange), b impl_outer_log! { pub enum Log(InternalLog: DigestItem<H256, u64>) for Runtime { @@ -409,26 +408,26 @@ mod tests { // encode/decode regular item let b1: Log = b::RawLog::B1::<u64>(777).into(); let encoded_b1 = b1.encode(); - let decoded_b1: Log = Decode::decode(&mut &encoded_b1[..]).unwrap(); + let decoded_b1: Log = DecodeHidden::decode(&mut &encoded_b1[..]).unwrap(); assert_eq!(b1, decoded_b1); // encode/decode system item let auth_change: Log = a::RawLog::AuthoritiesChange::<u64>(vec![100, 200, 300]).into(); let encoded_auth_change = auth_change.encode(); - let decoded_auth_change: Log = Decode::decode(&mut &encoded_auth_change[..]).unwrap(); + let decoded_auth_change: Log = DecodeHidden::decode(&mut &encoded_auth_change[..]).unwrap(); assert_eq!(auth_change, decoded_auth_change); // interpret regular item using `generic::DigestItem` - let generic_b1: generic::DigestItem<H256, u64> = Decode::decode(&mut &encoded_b1[..]).unwrap(); + let generic_b1: super::generic::DigestItem<H256, u64> = DecodeHidden::decode(&mut &encoded_b1[..]).unwrap(); match generic_b1 { - generic::DigestItem::Other(_) => (), + super::generic::DigestItem::Other(_) => (), _ => panic!("unexpected generic_b1: {:?}", generic_b1), } // interpret system item using `generic::DigestItem` - let generic_auth_change: generic::DigestItem<H256, u64> = Decode::decode(&mut &encoded_auth_change[..]).unwrap(); + let generic_auth_change: super::generic::DigestItem<H256, u64> = DecodeHidden::decode(&mut &encoded_auth_change[..]).unwrap(); match generic_auth_change { - generic::DigestItem::AuthoritiesChange::<H256, u64>(authorities) => assert_eq!(authorities, vec![100, 200, 300]), + super::generic::DigestItem::AuthoritiesChange::<H256, u64>(authorities) => assert_eq!(authorities, vec![100, 200, 300]), _ => panic!("unexpected generic_auth_change: {:?}", generic_auth_change), } } diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index 7711a64f96a60483e6406f8ccfa7c8c48bb5fefc..313f4093b979e23c13e28a5cad7ec2ac63619c08 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -64,7 +64,6 @@ mod checked_block; use rstd::prelude::*; use substrate_primitives::u32_trait::{_2, _4}; -use codec::{Encode, Decode, Input}; use node_primitives::{AccountId, AccountIndex, Balance, BlockNumber, Hash, Index, SessionKey, Signature, InherentData}; use runtime_primitives::generic; use runtime_primitives::traits::{Convert, BlakeTwo256, DigestItem};