Fix generate_storage_alias! (#11102)

* add test

* fix issues

* make order intuitive
This commit is contained in:
Shawn Tabrizi
2022-03-23 18:10:13 -04:00
committed by GitHub
parent 661d0ea5bb
commit 5c9f23af13
10 changed files with 45 additions and 31 deletions
+28 -14
View File
@@ -154,8 +154,8 @@ macro_rules! bounded_vec {
/// // to `Vec<u8>` /// // to `Vec<u8>`
/// generate_storage_alias!( /// generate_storage_alias!(
/// OtherPrefix, OtherStorageName => DoubleMap< /// OtherPrefix, OtherStorageName => DoubleMap<
/// (u32, Twox64Concat), /// (Twox64Concat, u32),
/// (u32, Twox64Concat), /// (Twox64Concat, u32),
/// Vec<u8> /// Vec<u8>
/// > /// >
/// ); /// );
@@ -165,8 +165,8 @@ macro_rules! bounded_vec {
/// generate_storage_alias!(Prefix, ValueName => Value<u32, OptionQuery>); /// generate_storage_alias!(Prefix, ValueName => Value<u32, OptionQuery>);
/// generate_storage_alias!( /// generate_storage_alias!(
/// Prefix, SomeStorageName => DoubleMap< /// Prefix, SomeStorageName => DoubleMap<
/// (u32, Twox64Concat), /// (Twox64Concat, u32),
/// (u32, Twox64Concat), /// (Twox64Concat, u32),
/// Vec<u8>, /// Vec<u8>,
/// ValueQuery /// ValueQuery
/// > /// >
@@ -175,14 +175,14 @@ macro_rules! bounded_vec {
/// // generate a map from `Config::AccountId` (with hasher `Twox64Concat`) to `Vec<u8>` /// // generate a map from `Config::AccountId` (with hasher `Twox64Concat`) to `Vec<u8>`
/// trait Config { type AccountId: codec::FullCodec; } /// trait Config { type AccountId: codec::FullCodec; }
/// generate_storage_alias!( /// generate_storage_alias!(
/// Prefix, GenericStorage<T: Config> => Map<(T::AccountId, Twox64Concat), Vec<u8>> /// Prefix, GenericStorage<T: Config> => Map<(Twox64Concat, T::AccountId), Vec<u8>>
/// ); /// );
/// # fn main() {} /// # fn main() {}
/// ``` /// ```
#[macro_export] #[macro_export]
macro_rules! generate_storage_alias { macro_rules! generate_storage_alias {
// without generic for $name. // without generic for $name.
($pallet:ident, $name:ident => Map<($key:ty, $hasher:ty), $value:ty $(, $querytype:ty)?>) => { ($pallet:ident, $name:ident => Map<($hasher:ty, $key:ty), $value:ty $(, $querytype:ty)?>) => {
$crate::paste::paste! { $crate::paste::paste! {
$crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name); $crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name);
type $name = $crate::storage::types::StorageMap< type $name = $crate::storage::types::StorageMap<
@@ -197,7 +197,7 @@ macro_rules! generate_storage_alias {
( (
$pallet:ident, $pallet:ident,
$name:ident $name:ident
=> DoubleMap<($key1:ty, $hasher1:ty), ($key2:ty, $hasher2:ty), $value:ty $(, $querytype:ty)?> => DoubleMap<($hasher1:ty, $key1:ty), ($hasher2:ty, $key2:ty), $value:ty $(, $querytype:ty)?>
) => { ) => {
$crate::paste::paste! { $crate::paste::paste! {
$crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name); $crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name);
@@ -215,7 +215,7 @@ macro_rules! generate_storage_alias {
( (
$pallet:ident, $pallet:ident,
$name:ident $name:ident
=> NMap<Key<$(($key:ty, $hasher:ty)),+>, $value:ty $(, $querytype:ty)?> => NMap<Key<$(($hasher:ty, $key:ty)),+>, $value:ty $(, $querytype:ty)?>
) => { ) => {
$crate::paste::paste! { $crate::paste::paste! {
$crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name); $crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name);
@@ -243,15 +243,15 @@ macro_rules! generate_storage_alias {
( (
$pallet:ident, $pallet:ident,
$name:ident<$t:ident : $bounds:tt> $name:ident<$t:ident : $bounds:tt>
=> Map<($key:ty, $hasher:ty), $value:ty $(, $querytype:ty)?> => Map<($hasher:ty, $key:ty), $value:ty $(, $querytype:ty)?>
) => { ) => {
$crate::paste::paste! { $crate::paste::paste! {
$crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name); $crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name);
#[allow(type_alias_bounds)] #[allow(type_alias_bounds)]
type $name<$t : $bounds> = $crate::storage::types::StorageMap< type $name<$t : $bounds> = $crate::storage::types::StorageMap<
[<$name Instance>], [<$name Instance>],
$key,
$hasher, $hasher,
$key,
$value, $value,
$( $querytype )? $( $querytype )?
>; >;
@@ -260,17 +260,17 @@ macro_rules! generate_storage_alias {
( (
$pallet:ident, $pallet:ident,
$name:ident<$t:ident : $bounds:tt> $name:ident<$t:ident : $bounds:tt>
=> DoubleMap<($key1:ty, $hasher1:ty), ($key2:ty, $hasher2:ty), $value:ty $(, $querytype:ty)?> => DoubleMap<($hasher1:ty, $key1:ty), ($hasher2:ty, $key2:ty), $value:ty $(, $querytype:ty)?>
) => { ) => {
$crate::paste::paste! { $crate::paste::paste! {
$crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name); $crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name);
#[allow(type_alias_bounds)] #[allow(type_alias_bounds)]
type $name<$t : $bounds> = $crate::storage::types::StorageDoubleMap< type $name<$t : $bounds> = $crate::storage::types::StorageDoubleMap<
[<$name Instance>], [<$name Instance>],
$key1,
$hasher1, $hasher1,
$key2, $key1,
$hasher2, $hasher2,
$key2,
$value, $value,
$( $querytype )? $( $querytype )?
>; >;
@@ -279,7 +279,7 @@ macro_rules! generate_storage_alias {
( (
$pallet:ident, $pallet:ident,
$name:ident<$t:ident : $bounds:tt> $name:ident<$t:ident : $bounds:tt>
=> NMap<$(($key:ty, $hasher:ty),)+ $value:ty $(, $querytype:ty)?> => NMap<$(($hasher:ty, $key:ty),)+ $value:ty $(, $querytype:ty)?>
) => { ) => {
$crate::paste::paste! { $crate::paste::paste! {
$crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name); $crate::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name);
@@ -945,6 +945,20 @@ pub mod tests {
} }
} }
#[test]
fn generate_storage_alias_works() {
new_test_ext().execute_with(|| {
generate_storage_alias!(
Test,
GenericData2<T: Config> => Map<(Blake2_128Concat, T::BlockNumber), T::BlockNumber>
);
assert_eq!(Module::<Test>::generic_data2(5), None);
GenericData2::<Test>::insert(5, 5);
assert_eq!(Module::<Test>::generic_data2(5), Some(5));
});
}
#[test] #[test]
fn map_issue_3318() { fn map_issue_3318() {
new_test_ext().execute_with(|| { new_test_ext().execute_with(|| {
@@ -344,10 +344,10 @@ pub mod test {
use sp_io::TestExternalities; use sp_io::TestExternalities;
crate::generate_storage_alias! { Prefix, Foo => Value<BoundedBTreeMap<u32, (), ConstU32<7>>> } crate::generate_storage_alias! { Prefix, Foo => Value<BoundedBTreeMap<u32, (), ConstU32<7>>> }
crate::generate_storage_alias! { Prefix, FooMap => Map<(u32, Twox128), BoundedBTreeMap<u32, (), ConstU32<7>>> } crate::generate_storage_alias! { Prefix, FooMap => Map<(Twox128, u32), BoundedBTreeMap<u32, (), ConstU32<7>>> }
crate::generate_storage_alias! { crate::generate_storage_alias! {
Prefix, Prefix,
FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), BoundedBTreeMap<u32, (), ConstU32<7>>> FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), BoundedBTreeMap<u32, (), ConstU32<7>>>
} }
fn map_from_keys<K>(keys: &[K]) -> BTreeMap<K, ()> fn map_from_keys<K>(keys: &[K]) -> BTreeMap<K, ()>
@@ -327,10 +327,10 @@ pub mod test {
use sp_std::convert::TryInto; use sp_std::convert::TryInto;
crate::generate_storage_alias! { Prefix, Foo => Value<BoundedBTreeSet<u32, ConstU32<7>>> } crate::generate_storage_alias! { Prefix, Foo => Value<BoundedBTreeSet<u32, ConstU32<7>>> }
crate::generate_storage_alias! { Prefix, FooMap => Map<(u32, Twox128), BoundedBTreeSet<u32, ConstU32<7>>> } crate::generate_storage_alias! { Prefix, FooMap => Map<(Twox128, u32), BoundedBTreeSet<u32, ConstU32<7>>> }
crate::generate_storage_alias! { crate::generate_storage_alias! {
Prefix, Prefix,
FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), BoundedBTreeSet<u32, ConstU32<7>>> FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), BoundedBTreeSet<u32, ConstU32<7>>>
} }
fn set_from_keys<T>(keys: &[T]) -> BTreeSet<T> fn set_from_keys<T>(keys: &[T]) -> BTreeSet<T>
@@ -589,10 +589,10 @@ pub mod test {
use sp_io::TestExternalities; use sp_io::TestExternalities;
crate::generate_storage_alias! { Prefix, Foo => Value<BoundedVec<u32, ConstU32<7>>> } crate::generate_storage_alias! { Prefix, Foo => Value<BoundedVec<u32, ConstU32<7>>> }
crate::generate_storage_alias! { Prefix, FooMap => Map<(u32, Twox128), BoundedVec<u32, ConstU32<7>>> } crate::generate_storage_alias! { Prefix, FooMap => Map<(Twox128, u32), BoundedVec<u32, ConstU32<7>>> }
crate::generate_storage_alias! { crate::generate_storage_alias! {
Prefix, Prefix,
FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), BoundedVec<u32, ConstU32<7>>> FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), BoundedVec<u32, ConstU32<7>>>
} }
#[test] #[test]
@@ -527,7 +527,7 @@ mod test_iterators {
use crate::hash::Identity; use crate::hash::Identity;
crate::generate_storage_alias!( crate::generate_storage_alias!(
MyModule, MyModule,
MyDoubleMap => DoubleMap<(u64, Identity), (u64, Identity), u64> MyDoubleMap => DoubleMap<(Identity, u64), (Identity, u64), u64>
); );
MyDoubleMap::insert(1, 10, 100); MyDoubleMap::insert(1, 10, 100);
@@ -384,7 +384,7 @@ mod test_iterators {
fn map_iter_from() { fn map_iter_from() {
sp_io::TestExternalities::default().execute_with(|| { sp_io::TestExternalities::default().execute_with(|| {
use crate::hash::Identity; use crate::hash::Identity;
crate::generate_storage_alias!(MyModule, MyMap => Map<(u64, Identity), u64>); crate::generate_storage_alias!(MyModule, MyMap => Map<(Identity, u64), u64>);
MyMap::insert(1, 10); MyMap::insert(1, 10);
MyMap::insert(2, 20); MyMap::insert(2, 20);
@@ -477,7 +477,7 @@ mod test_iterators {
use crate::{hash::Identity, storage::Key as NMapKey}; use crate::{hash::Identity, storage::Key as NMapKey};
crate::generate_storage_alias!( crate::generate_storage_alias!(
MyModule, MyModule,
MyNMap => NMap<Key<(u64, Identity), (u64, Identity), (u64, Identity)>, u64> MyNMap => NMap<Key<(Identity, u64), (Identity, u64), (Identity, u64)>, u64>
); );
MyNMap::insert((1, 1, 1), 11); MyNMap::insert((1, 1, 1), 11);
@@ -519,8 +519,8 @@ mod test_iterators {
{ {
crate::generate_storage_alias!(Test, NMap => DoubleMap< crate::generate_storage_alias!(Test, NMap => DoubleMap<
(u16, crate::Blake2_128Concat), (crate::Blake2_128Concat, u16),
(u32, crate::Twox64Concat), (crate::Twox64Concat, u32),
u64 u64
>); >);
+3 -3
View File
@@ -1618,7 +1618,7 @@ mod test {
use crate::{hash::Identity, storage::generator::map::StorageMap}; use crate::{hash::Identity, storage::generator::map::StorageMap};
crate::generate_storage_alias! { crate::generate_storage_alias! {
MyModule, MyModule,
MyStorageMap => Map<(u64, Identity), u64> MyStorageMap => Map<(Identity, u64), u64>
} }
MyStorageMap::insert(1, 10); MyStorageMap::insert(1, 10);
@@ -1735,10 +1735,10 @@ mod test {
} }
crate::generate_storage_alias! { Prefix, Foo => Value<WeakBoundedVec<u32, ConstU32<7>>> } crate::generate_storage_alias! { Prefix, Foo => Value<WeakBoundedVec<u32, ConstU32<7>>> }
crate::generate_storage_alias! { Prefix, FooMap => Map<(u32, Twox128), BoundedVec<u32, ConstU32<7>>> } crate::generate_storage_alias! { Prefix, FooMap => Map<(Twox128, u32), BoundedVec<u32, ConstU32<7>>> }
crate::generate_storage_alias! { crate::generate_storage_alias! {
Prefix, Prefix,
FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), BoundedVec<u32, ConstU32<7>>> FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), BoundedVec<u32, ConstU32<7>>>
} }
#[test] #[test]
@@ -569,7 +569,7 @@ mod test {
{ {
crate::generate_storage_alias!(test, Foo => NMap< crate::generate_storage_alias!(test, Foo => NMap<
Key<(u16, Blake2_128Concat)>, Key<(Blake2_128Concat, u16)>,
u32 u32
>); >);
@@ -323,10 +323,10 @@ pub mod test {
use sp_std::convert::TryInto; use sp_std::convert::TryInto;
crate::generate_storage_alias! { Prefix, Foo => Value<WeakBoundedVec<u32, ConstU32<7>>> } crate::generate_storage_alias! { Prefix, Foo => Value<WeakBoundedVec<u32, ConstU32<7>>> }
crate::generate_storage_alias! { Prefix, FooMap => Map<(u32, Twox128), WeakBoundedVec<u32, ConstU32<7>>> } crate::generate_storage_alias! { Prefix, FooMap => Map<(Twox128, u32), WeakBoundedVec<u32, ConstU32<7>>> }
crate::generate_storage_alias! { crate::generate_storage_alias! {
Prefix, Prefix,
FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), WeakBoundedVec<u32, ConstU32<7>>> FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), WeakBoundedVec<u32, ConstU32<7>>>
} }
#[test] #[test]