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>`
/// generate_storage_alias!(
/// OtherPrefix, OtherStorageName => DoubleMap<
/// (u32, Twox64Concat),
/// (u32, Twox64Concat),
/// (Twox64Concat, u32),
/// (Twox64Concat, u32),
/// Vec<u8>
/// >
/// );
@@ -165,8 +165,8 @@ macro_rules! bounded_vec {
/// generate_storage_alias!(Prefix, ValueName => Value<u32, OptionQuery>);
/// generate_storage_alias!(
/// Prefix, SomeStorageName => DoubleMap<
/// (u32, Twox64Concat),
/// (u32, Twox64Concat),
/// (Twox64Concat, u32),
/// (Twox64Concat, u32),
/// Vec<u8>,
/// ValueQuery
/// >
@@ -175,14 +175,14 @@ macro_rules! bounded_vec {
/// // generate a map from `Config::AccountId` (with hasher `Twox64Concat`) to `Vec<u8>`
/// trait Config { type AccountId: codec::FullCodec; }
/// 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() {}
/// ```
#[macro_export]
macro_rules! generate_storage_alias {
// 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::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name);
type $name = $crate::storage::types::StorageMap<
@@ -197,7 +197,7 @@ macro_rules! generate_storage_alias {
(
$pallet: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::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name);
@@ -215,7 +215,7 @@ macro_rules! generate_storage_alias {
(
$pallet: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::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name);
@@ -243,15 +243,15 @@ macro_rules! generate_storage_alias {
(
$pallet:ident,
$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::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name);
#[allow(type_alias_bounds)]
type $name<$t : $bounds> = $crate::storage::types::StorageMap<
[<$name Instance>],
$key,
$hasher,
$key,
$value,
$( $querytype )?
>;
@@ -260,17 +260,17 @@ macro_rules! generate_storage_alias {
(
$pallet:ident,
$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::generate_storage_alias!(@GENERATE_INSTANCE_STRUCT $pallet, $name);
#[allow(type_alias_bounds)]
type $name<$t : $bounds> = $crate::storage::types::StorageDoubleMap<
[<$name Instance>],
$key1,
$hasher1,
$key2,
$key1,
$hasher2,
$key2,
$value,
$( $querytype )?
>;
@@ -279,7 +279,7 @@ macro_rules! generate_storage_alias {
(
$pallet:ident,
$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::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]
fn map_issue_3318() {
new_test_ext().execute_with(|| {
@@ -344,10 +344,10 @@ pub mod test {
use sp_io::TestExternalities;
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! {
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, ()>
@@ -327,10 +327,10 @@ pub mod test {
use sp_std::convert::TryInto;
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! {
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>
@@ -589,10 +589,10 @@ pub mod test {
use sp_io::TestExternalities;
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! {
Prefix,
FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), BoundedVec<u32, ConstU32<7>>>
FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), BoundedVec<u32, ConstU32<7>>>
}
#[test]
@@ -527,7 +527,7 @@ mod test_iterators {
use crate::hash::Identity;
crate::generate_storage_alias!(
MyModule,
MyDoubleMap => DoubleMap<(u64, Identity), (u64, Identity), u64>
MyDoubleMap => DoubleMap<(Identity, u64), (Identity, u64), u64>
);
MyDoubleMap::insert(1, 10, 100);
@@ -384,7 +384,7 @@ mod test_iterators {
fn map_iter_from() {
sp_io::TestExternalities::default().execute_with(|| {
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(2, 20);
@@ -477,7 +477,7 @@ mod test_iterators {
use crate::{hash::Identity, storage::Key as NMapKey};
crate::generate_storage_alias!(
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);
@@ -519,8 +519,8 @@ mod test_iterators {
{
crate::generate_storage_alias!(Test, NMap => DoubleMap<
(u16, crate::Blake2_128Concat),
(u32, crate::Twox64Concat),
(crate::Blake2_128Concat, u16),
(crate::Twox64Concat, u32),
u64
>);
+3 -3
View File
@@ -1618,7 +1618,7 @@ mod test {
use crate::{hash::Identity, storage::generator::map::StorageMap};
crate::generate_storage_alias! {
MyModule,
MyStorageMap => Map<(u64, Identity), u64>
MyStorageMap => Map<(Identity, u64), u64>
}
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, 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! {
Prefix,
FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), BoundedVec<u32, ConstU32<7>>>
FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), BoundedVec<u32, ConstU32<7>>>
}
#[test]
@@ -569,7 +569,7 @@ mod test {
{
crate::generate_storage_alias!(test, Foo => NMap<
Key<(u16, Blake2_128Concat)>,
Key<(Blake2_128Concat, u16)>,
u32
>);
@@ -323,10 +323,10 @@ pub mod test {
use sp_std::convert::TryInto;
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! {
Prefix,
FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), WeakBoundedVec<u32, ConstU32<7>>>
FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), WeakBoundedVec<u32, ConstU32<7>>>
}
#[test]