mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-09 20:11:09 +00:00
drew.tupletimestamp - Add tuple macro for timestamps too, break macro out into support (#1372)
* Add tuple and dont mess up spacing * Update lib.rs * Add timestamp tuple macro : * Tabs * Add docs.
This commit is contained in:
@@ -42,6 +42,7 @@ use primitives::traits::{As, Zero, One, Convert};
|
||||
use codec::HasCompact;
|
||||
use runtime_support::{StorageValue, StorageMap};
|
||||
use runtime_support::dispatch::Result;
|
||||
use runtime_support::for_each_tuple;
|
||||
use system::ensure_signed;
|
||||
use rstd::ops::Mul;
|
||||
|
||||
@@ -51,17 +52,6 @@ pub trait OnSessionChange<T> {
|
||||
fn on_session_change(time_elapsed: T, should_reward: bool);
|
||||
}
|
||||
|
||||
macro_rules! for_each_tuple {
|
||||
($m:ident) => {
|
||||
for_each_tuple! { @IMPL $m !! A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, }
|
||||
};
|
||||
(@IMPL $m:ident !!) => { $m! { } };
|
||||
(@IMPL $m:ident !! $h:ident, $($t:ident,)*) => {
|
||||
$m! { $h $($t)* }
|
||||
for_each_tuple! { @IMPL $m !! $($t,)* }
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! impl_session_change {
|
||||
() => (
|
||||
impl<T> OnSessionChange<T> for () {
|
||||
@@ -80,7 +70,6 @@ macro_rules! impl_session_change {
|
||||
|
||||
for_each_tuple!(impl_session_change);
|
||||
|
||||
|
||||
pub trait Trait: timestamp::Trait {
|
||||
type ConvertAccountIdToSessionKey: Convert<Self::AccountId, Self::SessionKey>;
|
||||
type OnSessionChange: OnSessionChange<Self::Moment>;
|
||||
|
||||
@@ -134,3 +134,18 @@ pub use mashup::*;
|
||||
#[cfg(feature = "std")]
|
||||
#[doc(hidden)]
|
||||
pub use serde_derive::*;
|
||||
|
||||
/// Programatically create derivations for tuples of up to 19 elements. You provide a second macro
|
||||
/// which is called once per tuple size, along with a number of identifiers, one for each element
|
||||
/// of the tuple.
|
||||
#[macro_export]
|
||||
macro_rules! for_each_tuple {
|
||||
($m:ident) => {
|
||||
for_each_tuple! { @IMPL $m !! A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, }
|
||||
};
|
||||
(@IMPL $m:ident !!) => { $m! { } };
|
||||
(@IMPL $m:ident !! $h:ident, $($t:ident,)*) => {
|
||||
$m! { $h $($t)* }
|
||||
for_each_tuple! { @IMPL $m !! $($t,)* }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,25 +55,31 @@ use runtime_primitives::traits::{
|
||||
};
|
||||
use system::ensure_inherent;
|
||||
use rstd::{result, ops::{Mul, Div}, vec::Vec};
|
||||
use runtime_support::for_each_tuple;
|
||||
|
||||
/// A trait which is called when the timestamp is set.
|
||||
pub trait OnTimestampSet<Moment> {
|
||||
fn on_timestamp_set(moment: Moment);
|
||||
}
|
||||
|
||||
impl<Moment> OnTimestampSet<Moment> for () {
|
||||
fn on_timestamp_set(_moment: Moment) { }
|
||||
}
|
||||
macro_rules! impl_timestamp_set {
|
||||
() => (
|
||||
impl<Moment> OnTimestampSet<Moment> for () {
|
||||
fn on_timestamp_set(_: Moment) {}
|
||||
}
|
||||
);
|
||||
|
||||
impl<A, B, Moment: Clone> OnTimestampSet<Moment> for (A, B)
|
||||
where A: OnTimestampSet<Moment>, B: OnTimestampSet<Moment>
|
||||
{
|
||||
fn on_timestamp_set(moment: Moment) {
|
||||
A::on_timestamp_set(moment.clone());
|
||||
B::on_timestamp_set(moment);
|
||||
( $($t:ident)* ) => {
|
||||
impl<Moment: Clone, $($t: OnTimestampSet<Moment>),*> OnTimestampSet<Moment> for ($($t,)*) {
|
||||
fn on_timestamp_set(moment: Moment) {
|
||||
$($t::on_timestamp_set(moment.clone());)*
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for_each_tuple!(impl_timestamp_set);
|
||||
|
||||
pub trait Trait: consensus::Trait + system::Trait {
|
||||
/// The position of the required timestamp-set extrinsic.
|
||||
const TIMESTAMP_SET_POSITION: u32;
|
||||
|
||||
Reference in New Issue
Block a user