From 8e6cb1b6e2b79352120afe2f44c7c3d7fdf2f576 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Tue, 30 Jan 2018 19:28:57 +0100 Subject: [PATCH] more idiomatic std features --- substrate/Cargo.lock | 1 + substrate/native-runtime/Cargo.toml | 5 ++--- substrate/native-runtime/std/src/lib.rs | 2 +- substrate/primitives/Cargo.toml | 3 ++- substrate/runtime-codec/Cargo.toml | 4 ++-- substrate/runtime-codec/src/lib.rs | 6 +++--- substrate/wasm-runtime/polkadot/Cargo.toml | 7 +++---- substrate/wasm-runtime/polkadot/src/lib.rs | 4 ++-- .../polkadot/src/primitives/block.rs | 2 +- .../polkadot/src/primitives/digest.rs | 2 +- .../polkadot/src/primitives/function.rs | 2 +- .../polkadot/src/primitives/header.rs | 2 +- .../polkadot/src/primitives/proposal.rs | 4 ++-- .../polkadot/src/primitives/transaction.rs | 2 +- .../src/primitives/uncheckedtransaction.rs | 6 +++--- .../wasm-runtime/polkadot/src/support/mod.rs | 8 ++++---- .../release/runtime_polkadot.compact.wasm | Bin 65037 -> 65037 bytes .../release/runtime_polkadot.wasm | Bin 65086 -> 65086 bytes 18 files changed, 30 insertions(+), 30 deletions(-) diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index 3b715cee8d..e04172230f 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -748,6 +748,7 @@ dependencies = [ "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "fixed-hash 0.1.0 (git+https://github.com/paritytech/primitives.git)", + "polkadot-runtime-codec 0.1.0", "polkadot-serializer 0.1.0", "pretty_assertions 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/substrate/native-runtime/Cargo.toml b/substrate/native-runtime/Cargo.toml index 60dbbe19c6..6f446049f4 100644 --- a/substrate/native-runtime/Cargo.toml +++ b/substrate/native-runtime/Cargo.toml @@ -9,6 +9,5 @@ runtime-std = { path = "./std", version = "0.1" } rustc-hex = "1.0" [features] -default = ["with-std"] -with-std = [] -without-std = ["polkadot-runtime-codec/no-std"] +default = ["std"] +std = ["polkadot-runtime-codec/std"] diff --git a/substrate/native-runtime/std/src/lib.rs b/substrate/native-runtime/std/src/lib.rs index fb74093d18..7a46ce4615 100644 --- a/substrate/native-runtime/std/src/lib.rs +++ b/substrate/native-runtime/std/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! The with-std support functions for the runtime. +//! The std support functions for the runtime. #[macro_use] extern crate environmental; diff --git a/substrate/primitives/Cargo.toml b/substrate/primitives/Cargo.toml index 77eccdea88..8b3782e545 100644 --- a/substrate/primitives/Cargo.toml +++ b/substrate/primitives/Cargo.toml @@ -15,6 +15,7 @@ untrusted = "0.5" twox-hash = "1.1.0" byteorder = "1.1" blake2-rfc = "0.2.18" +polkadot-runtime-codec = { path = "../runtime-codec", version = "0.1" } [dev-dependencies] polkadot-serializer = { path = "../serializer", version = "0.1" } @@ -22,4 +23,4 @@ pretty_assertions = "0.4" [features] default = ["std"] -std = ["uint/std", "fixed-hash/std"] +std = ["uint/std", "fixed-hash/std", "polkadot-runtime-codec/std"] diff --git a/substrate/runtime-codec/Cargo.toml b/substrate/runtime-codec/Cargo.toml index 3221a55802..c85c9c0631 100644 --- a/substrate/runtime-codec/Cargo.toml +++ b/substrate/runtime-codec/Cargo.toml @@ -7,5 +7,5 @@ authors = ["Parity Technologies "] [dependencies] [features] -no-std = [] -default = [] +std = [] +default = ["std"] diff --git a/substrate/runtime-codec/src/lib.rs b/substrate/runtime-codec/src/lib.rs index 060df4e95c..f31fa3cf94 100644 --- a/substrate/runtime-codec/src/lib.rs +++ b/substrate/runtime-codec/src/lib.rs @@ -17,8 +17,8 @@ //! Implements the serialization and deserialization codec for polkadot runtime //! values. -#![cfg_attr(feature = "no-std", no_std)] -#![cfg_attr(feature = "no-std", feature(alloc))] +#![cfg_attr(not(feature = "std"), no_std)] +#![cfg_attr(not(feature = "std"), feature(alloc))] mod endiansensitive; mod slicable; @@ -32,7 +32,7 @@ pub use self::streamreader::StreamReader; pub use self::joiner::Joiner; pub use self::keyedvec::KeyedVec; -#[cfg(feature = "no-std")] +#[cfg(not(feature = "std"))] mod std { extern crate alloc; diff --git a/substrate/wasm-runtime/polkadot/Cargo.toml b/substrate/wasm-runtime/polkadot/Cargo.toml index 5cc45d4c01..053e704803 100644 --- a/substrate/wasm-runtime/polkadot/Cargo.toml +++ b/substrate/wasm-runtime/polkadot/Cargo.toml @@ -7,10 +7,9 @@ authors = ["Parity Technologies "] crate-type = ["cdylib"] [dependencies] -polkadot-runtime-codec = { path = "../../runtime-codec", version = "0.1" } +polkadot-runtime-codec = { path = "../../runtime-codec", version = "0.1", default-features = false} runtime-std = { path = "../std", version = "0.1" } [features] -default = ["without-std"] -with-std = [] -without-std = ["polkadot-runtime-codec/no-std"] +default = [] +std = ["polkadot-runtime-codec/std"] diff --git a/substrate/wasm-runtime/polkadot/src/lib.rs b/substrate/wasm-runtime/polkadot/src/lib.rs index ceec42af21..23e441e114 100644 --- a/substrate/wasm-runtime/polkadot/src/lib.rs +++ b/substrate/wasm-runtime/polkadot/src/lib.rs @@ -16,12 +16,12 @@ //! The Polkadot runtime. This can be compiled with #[no_std], ready for Wasm. -#![cfg_attr(feature = "without-std", no_std)] +#![cfg_attr(not(feature = "std"), no_std)] #[macro_use] extern crate runtime_std; -#[cfg(feature = "with-std")] +#[cfg(feature = "std")] extern crate rustc_hex; extern crate polkadot_runtime_codec as codec; diff --git a/substrate/wasm-runtime/polkadot/src/primitives/block.rs b/substrate/wasm-runtime/polkadot/src/primitives/block.rs index a884bcccec..3512133e53 100644 --- a/substrate/wasm-runtime/polkadot/src/primitives/block.rs +++ b/substrate/wasm-runtime/polkadot/src/primitives/block.rs @@ -21,7 +21,7 @@ use codec::{StreamReader, Joiner, Slicable, NonTrivialSlicable}; use primitives::{Header, UncheckedTransaction}; /// A Polkadot relay chain block. -#[cfg_attr(feature = "with-std", derive(PartialEq, Debug))] +#[cfg_attr(feature = "std", derive(PartialEq, Debug))] pub struct Block { /// The header of the block. pub header: Header, diff --git a/substrate/wasm-runtime/polkadot/src/primitives/digest.rs b/substrate/wasm-runtime/polkadot/src/primitives/digest.rs index 18107460b0..10f36aef4f 100644 --- a/substrate/wasm-runtime/polkadot/src/primitives/digest.rs +++ b/substrate/wasm-runtime/polkadot/src/primitives/digest.rs @@ -19,7 +19,7 @@ use runtime_std::prelude::*; #[derive(Clone, Default)] -#[cfg_attr(feature = "with-std", derive(PartialEq, Debug))] +#[cfg_attr(feature = "std", derive(PartialEq, Debug))] /// The digest of a block, useful for light-clients. pub struct Digest { /// All logs that have happened in the block. diff --git a/substrate/wasm-runtime/polkadot/src/primitives/function.rs b/substrate/wasm-runtime/polkadot/src/primitives/function.rs index e906cdc718..8aafbb5231 100644 --- a/substrate/wasm-runtime/polkadot/src/primitives/function.rs +++ b/substrate/wasm-runtime/polkadot/src/primitives/function.rs @@ -22,7 +22,7 @@ use runtime::{staking, session, timestamp, governance}; /// Public functions that can be dispatched to. #[derive(Clone, Copy)] -#[cfg_attr(feature = "with-std", derive(PartialEq, Debug))] +#[cfg_attr(feature = "std", derive(PartialEq, Debug))] #[repr(u8)] pub enum Function { StakingStake = 0, diff --git a/substrate/wasm-runtime/polkadot/src/primitives/header.rs b/substrate/wasm-runtime/polkadot/src/primitives/header.rs index 4c1ec328ea..7143ae7580 100644 --- a/substrate/wasm-runtime/polkadot/src/primitives/header.rs +++ b/substrate/wasm-runtime/polkadot/src/primitives/header.rs @@ -22,7 +22,7 @@ use runtime_std::mem; use primitives::{BlockNumber, Hash, Digest}; #[derive(Clone)] -#[cfg_attr(feature = "with-std", derive(PartialEq, Debug))] +#[cfg_attr(feature = "std", derive(PartialEq, Debug))] /// The header for a block. pub struct Header { /// The parent block's "hash" (actually the Blake2-256 hash of its serialised header). diff --git a/substrate/wasm-runtime/polkadot/src/primitives/proposal.rs b/substrate/wasm-runtime/polkadot/src/primitives/proposal.rs index 8eb050cf67..a4c9b5f805 100644 --- a/substrate/wasm-runtime/polkadot/src/primitives/proposal.rs +++ b/substrate/wasm-runtime/polkadot/src/primitives/proposal.rs @@ -24,7 +24,7 @@ use runtime::{system, governance, staking, session}; /// Internal functions that can be dispatched to. #[derive(Clone, Copy)] -#[cfg_attr(feature = "with-std", derive(PartialEq, Debug))] +#[cfg_attr(feature = "std", derive(PartialEq, Debug))] #[repr(u8)] pub enum InternalFunction { SystemSetCode = 0, @@ -56,7 +56,7 @@ impl InternalFunction { } /// An internal function. -#[cfg_attr(feature = "with-std", derive(PartialEq, Debug))] +#[cfg_attr(feature = "std", derive(PartialEq, Debug))] pub struct Proposal { /// The priviledged function to call. pub function: InternalFunction, diff --git a/substrate/wasm-runtime/polkadot/src/primitives/transaction.rs b/substrate/wasm-runtime/polkadot/src/primitives/transaction.rs index 73ab9edd29..c31e63cfd9 100644 --- a/substrate/wasm-runtime/polkadot/src/primitives/transaction.rs +++ b/substrate/wasm-runtime/polkadot/src/primitives/transaction.rs @@ -22,7 +22,7 @@ use primitives::{AccountID, TxOrder, Function}; use runtime_std::mem; /// A vetted and verified transaction from the external world. -#[cfg_attr(feature = "with-std", derive(PartialEq, Debug))] +#[cfg_attr(feature = "std", derive(PartialEq, Debug))] pub struct Transaction { /// Who signed it (note this is not a signature). pub signed: AccountID, diff --git a/substrate/wasm-runtime/polkadot/src/primitives/uncheckedtransaction.rs b/substrate/wasm-runtime/polkadot/src/primitives/uncheckedtransaction.rs index 83984e08a4..1bbce40455 100644 --- a/substrate/wasm-runtime/polkadot/src/primitives/uncheckedtransaction.rs +++ b/substrate/wasm-runtime/polkadot/src/primitives/uncheckedtransaction.rs @@ -21,7 +21,7 @@ use runtime_std::prelude::*; use codec::{Slicable, NonTrivialSlicable, StreamReader, Joiner}; use primitives::Transaction; -#[cfg(feature = "with-std")] +#[cfg(feature = "std")] use std::fmt; /// A transactions right from the external world. Unchecked. @@ -40,14 +40,14 @@ impl UncheckedTransaction { } } -#[cfg(feature = "with-std")] +#[cfg(feature = "std")] impl PartialEq for UncheckedTransaction { fn eq(&self, other: &Self) -> bool { self.signature.iter().eq(other.signature.iter()) && self.transaction == other.transaction } } -#[cfg(feature = "with-std")] +#[cfg(feature = "std")] impl fmt::Debug for UncheckedTransaction { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "UncheckedTransaction({:?})", self.transaction) diff --git a/substrate/wasm-runtime/polkadot/src/support/mod.rs b/substrate/wasm-runtime/polkadot/src/support/mod.rs index 6bc60880a0..07c62c3a92 100644 --- a/substrate/wasm-runtime/polkadot/src/support/mod.rs +++ b/substrate/wasm-runtime/polkadot/src/support/mod.rs @@ -19,16 +19,16 @@ mod environment; pub mod storage; mod hashable; -#[cfg(feature = "with-std")] +#[cfg(feature = "std")] mod statichex; #[macro_use] -#[cfg(feature = "with-std")] +#[cfg(feature = "std")] mod testing; pub use self::environment::with_env; pub use self::storage::StorageVec; pub use self::hashable::Hashable; -#[cfg(feature = "with-std")] +#[cfg(feature = "std")] pub use self::statichex::{StaticHexConversion, StaticHexInto}; -#[cfg(feature = "with-std")] +#[cfg(feature = "std")] pub use self::testing::{AsBytesRef, HexDisplay, TestExternalities, one, two}; diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index 898f194e802daf2caf927eb0e35beb50b42fd7ec..f6d352781bc22b76a0073e2d4b09f391003d6812 100644 GIT binary patch delta 2582 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 Qhj@FghzzV^#kVZ~12NSTO8@`>