From 5be9b3fc769afd2fe9073c5eb4532cadc5ed4f85 Mon Sep 17 00:00:00 2001 From: Liu-Cheng Xu Date: Wed, 14 Jul 2021 18:23:03 +0800 Subject: [PATCH] Impl InherentDataProviderExt for more tuples (#9282) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Impl InherentDataProviderExt for more tuples Currently the inherent data provider only supports up to 4 entries due to the limit of InherentDataProviderExt, which is not enough for a chain with more than 4 inherent data providers. This patch simply impls InherentDataProviderExt for more tuples. * Nit * Apply suggestions from code review Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> Co-authored-by: Guillaume Thiolliere Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> --- substrate/client/consensus/slots/src/lib.rs | 63 +++++++++------------ 1 file changed, 26 insertions(+), 37 deletions(-) diff --git a/substrate/client/consensus/slots/src/lib.rs b/substrate/client/consensus/slots/src/lib.rs index 1ec89a6f51..c410f173e9 100644 --- a/substrate/client/consensus/slots/src/lib.rs +++ b/substrate/client/consensus/slots/src/lib.rs @@ -454,47 +454,36 @@ pub trait InherentDataProviderExt { fn slot(&self) -> Slot; } -impl InherentDataProviderExt for (T, S, P) -where - T: Deref, - S: Deref, -{ - fn timestamp(&self) -> Timestamp { - *self.0.deref() - } +/// Small macro for implementing `InherentDataProviderExt` for inherent data provider tuple. +macro_rules! impl_inherent_data_provider_ext_tuple { + ( T, S $(, $TN:ident)* $( , )?) => { + impl InherentDataProviderExt for (T, S, $($TN),*) + where + T: Deref, + S: Deref, + { + fn timestamp(&self) -> Timestamp { + *self.0.deref() + } - fn slot(&self) -> Slot { - *self.1.deref() + fn slot(&self) -> Slot { + *self.1.deref() + } + } } } -impl InherentDataProviderExt for (T, S, P, R) -where - T: Deref, - S: Deref, -{ - fn timestamp(&self) -> Timestamp { - *self.0.deref() - } - - fn slot(&self) -> Slot { - *self.1.deref() - } -} - -impl InherentDataProviderExt for (T, S) -where - T: Deref, - S: Deref, -{ - fn timestamp(&self) -> Timestamp { - *self.0.deref() - } - - fn slot(&self) -> Slot { - *self.1.deref() - } -} +impl_inherent_data_provider_ext_tuple!(T, S); +impl_inherent_data_provider_ext_tuple!(T, S, A); +impl_inherent_data_provider_ext_tuple!(T, S, A, B); +impl_inherent_data_provider_ext_tuple!(T, S, A, B, C); +impl_inherent_data_provider_ext_tuple!(T, S, A, B, C, D); +impl_inherent_data_provider_ext_tuple!(T, S, A, B, C, D, E); +impl_inherent_data_provider_ext_tuple!(T, S, A, B, C, D, E, F); +impl_inherent_data_provider_ext_tuple!(T, S, A, B, C, D, E, F, G); +impl_inherent_data_provider_ext_tuple!(T, S, A, B, C, D, E, F, G, H); +impl_inherent_data_provider_ext_tuple!(T, S, A, B, C, D, E, F, G, H, I); +impl_inherent_data_provider_ext_tuple!(T, S, A, B, C, D, E, F, G, H, I, J); /// Start a new slot worker. ///