diff --git a/substrate/frame/support/src/lib.rs b/substrate/frame/support/src/lib.rs index 3988b5e9af..5f62995c52 100644 --- a/substrate/frame/support/src/lib.rs +++ b/substrate/frame/support/src/lib.rs @@ -154,8 +154,8 @@ macro_rules! bounded_vec { /// // to `Vec` /// generate_storage_alias!( /// OtherPrefix, OtherStorageName => DoubleMap< -/// (u32, Twox64Concat), -/// (u32, Twox64Concat), +/// (Twox64Concat, u32), +/// (Twox64Concat, u32), /// Vec /// > /// ); @@ -165,8 +165,8 @@ macro_rules! bounded_vec { /// generate_storage_alias!(Prefix, ValueName => Value); /// generate_storage_alias!( /// Prefix, SomeStorageName => DoubleMap< -/// (u32, Twox64Concat), -/// (u32, Twox64Concat), +/// (Twox64Concat, u32), +/// (Twox64Concat, u32), /// Vec, /// ValueQuery /// > @@ -175,14 +175,14 @@ macro_rules! bounded_vec { /// // generate a map from `Config::AccountId` (with hasher `Twox64Concat`) to `Vec` /// trait Config { type AccountId: codec::FullCodec; } /// generate_storage_alias!( -/// Prefix, GenericStorage => Map<(T::AccountId, Twox64Concat), Vec> +/// Prefix, GenericStorage => Map<(Twox64Concat, T::AccountId), Vec> /// ); /// # 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, $value:ty $(, $querytype:ty)?> + => NMap, $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 => Map<(Blake2_128Concat, T::BlockNumber), T::BlockNumber> + ); + + assert_eq!(Module::::generic_data2(5), None); + GenericData2::::insert(5, 5); + assert_eq!(Module::::generic_data2(5), Some(5)); + }); + } + #[test] fn map_issue_3318() { new_test_ext().execute_with(|| { diff --git a/substrate/frame/support/src/storage/bounded_btree_map.rs b/substrate/frame/support/src/storage/bounded_btree_map.rs index ed132adac6..6190552476 100644 --- a/substrate/frame/support/src/storage/bounded_btree_map.rs +++ b/substrate/frame/support/src/storage/bounded_btree_map.rs @@ -344,10 +344,10 @@ pub mod test { use sp_io::TestExternalities; crate::generate_storage_alias! { Prefix, Foo => Value>> } - crate::generate_storage_alias! { Prefix, FooMap => Map<(u32, Twox128), BoundedBTreeMap>> } + crate::generate_storage_alias! { Prefix, FooMap => Map<(Twox128, u32), BoundedBTreeMap>> } crate::generate_storage_alias! { Prefix, - FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), BoundedBTreeMap>> + FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), BoundedBTreeMap>> } fn map_from_keys(keys: &[K]) -> BTreeMap diff --git a/substrate/frame/support/src/storage/bounded_btree_set.rs b/substrate/frame/support/src/storage/bounded_btree_set.rs index 7d543549c6..543b997e94 100644 --- a/substrate/frame/support/src/storage/bounded_btree_set.rs +++ b/substrate/frame/support/src/storage/bounded_btree_set.rs @@ -327,10 +327,10 @@ pub mod test { use sp_std::convert::TryInto; crate::generate_storage_alias! { Prefix, Foo => Value>> } - crate::generate_storage_alias! { Prefix, FooMap => Map<(u32, Twox128), BoundedBTreeSet>> } + crate::generate_storage_alias! { Prefix, FooMap => Map<(Twox128, u32), BoundedBTreeSet>> } crate::generate_storage_alias! { Prefix, - FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), BoundedBTreeSet>> + FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), BoundedBTreeSet>> } fn set_from_keys(keys: &[T]) -> BTreeSet diff --git a/substrate/frame/support/src/storage/bounded_vec.rs b/substrate/frame/support/src/storage/bounded_vec.rs index 4e513258f9..cf585af395 100644 --- a/substrate/frame/support/src/storage/bounded_vec.rs +++ b/substrate/frame/support/src/storage/bounded_vec.rs @@ -589,10 +589,10 @@ pub mod test { use sp_io::TestExternalities; crate::generate_storage_alias! { Prefix, Foo => Value>> } - crate::generate_storage_alias! { Prefix, FooMap => Map<(u32, Twox128), BoundedVec>> } + crate::generate_storage_alias! { Prefix, FooMap => Map<(Twox128, u32), BoundedVec>> } crate::generate_storage_alias! { Prefix, - FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), BoundedVec>> + FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), BoundedVec>> } #[test] diff --git a/substrate/frame/support/src/storage/generator/double_map.rs b/substrate/frame/support/src/storage/generator/double_map.rs index d63dda7d5b..12e1764bfb 100644 --- a/substrate/frame/support/src/storage/generator/double_map.rs +++ b/substrate/frame/support/src/storage/generator/double_map.rs @@ -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); diff --git a/substrate/frame/support/src/storage/generator/map.rs b/substrate/frame/support/src/storage/generator/map.rs index 4157edefea..da48952bcb 100644 --- a/substrate/frame/support/src/storage/generator/map.rs +++ b/substrate/frame/support/src/storage/generator/map.rs @@ -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); diff --git a/substrate/frame/support/src/storage/generator/nmap.rs b/substrate/frame/support/src/storage/generator/nmap.rs index 1ad308bb22..be085ca2d9 100755 --- a/substrate/frame/support/src/storage/generator/nmap.rs +++ b/substrate/frame/support/src/storage/generator/nmap.rs @@ -477,7 +477,7 @@ mod test_iterators { use crate::{hash::Identity, storage::Key as NMapKey}; crate::generate_storage_alias!( MyModule, - MyNMap => NMap, u64> + MyNMap => NMap, 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 >); diff --git a/substrate/frame/support/src/storage/mod.rs b/substrate/frame/support/src/storage/mod.rs index 3d777fa3ac..226682eecf 100644 --- a/substrate/frame/support/src/storage/mod.rs +++ b/substrate/frame/support/src/storage/mod.rs @@ -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>> } - crate::generate_storage_alias! { Prefix, FooMap => Map<(u32, Twox128), BoundedVec>> } + crate::generate_storage_alias! { Prefix, FooMap => Map<(Twox128, u32), BoundedVec>> } crate::generate_storage_alias! { Prefix, - FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), BoundedVec>> + FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), BoundedVec>> } #[test] diff --git a/substrate/frame/support/src/storage/types/nmap.rs b/substrate/frame/support/src/storage/types/nmap.rs index 5b51ed1ffd..561bf5298e 100755 --- a/substrate/frame/support/src/storage/types/nmap.rs +++ b/substrate/frame/support/src/storage/types/nmap.rs @@ -569,7 +569,7 @@ mod test { { crate::generate_storage_alias!(test, Foo => NMap< - Key<(u16, Blake2_128Concat)>, + Key<(Blake2_128Concat, u16)>, u32 >); diff --git a/substrate/frame/support/src/storage/weak_bounded_vec.rs b/substrate/frame/support/src/storage/weak_bounded_vec.rs index db62d73035..4b3d87f776 100644 --- a/substrate/frame/support/src/storage/weak_bounded_vec.rs +++ b/substrate/frame/support/src/storage/weak_bounded_vec.rs @@ -323,10 +323,10 @@ pub mod test { use sp_std::convert::TryInto; crate::generate_storage_alias! { Prefix, Foo => Value>> } - crate::generate_storage_alias! { Prefix, FooMap => Map<(u32, Twox128), WeakBoundedVec>> } + crate::generate_storage_alias! { Prefix, FooMap => Map<(Twox128, u32), WeakBoundedVec>> } crate::generate_storage_alias! { Prefix, - FooDoubleMap => DoubleMap<(u32, Twox128), (u32, Twox128), WeakBoundedVec>> + FooDoubleMap => DoubleMap<(Twox128, u32), (Twox128, u32), WeakBoundedVec>> } #[test]