macro_rules! generate_storage_alias {
    ($pallet:ident, $name:ident => Map<($key:ty, $hasher:ty), $value:ty $(, $querytype:ty)?>) => { ... };
    (
		$pallet:ident,
		$name:ident
		=> DoubleMap<($key1:ty, $hasher1:ty), ($key2:ty, $hasher2:ty), $value:ty $(, $querytype:ty)?>
	) => { ... };
    (
		$pallet:ident,
		$name:ident
		=> NMap<Key<$(($key:ty, $hasher:ty)),+>, $value:ty $(, $querytype:ty)?>
	) => { ... };
    ($pallet:ident, $name:ident => Value<$value:ty $(, $querytype:ty)?>) => { ... };
    (
		$pallet:ident,
		$name:ident<$t:ident : $bounds:tt>
		=> Map<($key:ty, $hasher:ty), $value:ty $(, $querytype:ty)?>
	) => { ... };
    (
		$pallet:ident,
		$name:ident<$t:ident : $bounds:tt>
		=> DoubleMap<($key1:ty, $hasher1:ty), ($key2:ty, $hasher2:ty), $value:ty $(, $querytype:ty)?>
	) => { ... };
    (
		$pallet:ident,
		$name:ident<$t:ident : $bounds:tt>
		=> NMap<$(($key:ty, $hasher:ty),)+ $value:ty $(, $querytype:ty)?>
	) => { ... };
    ($pallet:ident, $name:ident<$t:ident : $bounds:tt> => Value<$value:ty $(, $querytype:ty)?>) => { ... };
    (@GENERATE_INSTANCE_STRUCT $pallet:ident, $name:ident) => { ... };
}
Expand description

Generate a new type alias for storage::types::StorageValue, storage::types::StorageMap, storage::types::StorageDoubleMap and storage::types::StorageNMap.

Useful for creating a storage-like struct for test and migrations.

use frame_support::codec;
use frame_support::Twox64Concat;
// generate a storage value with type u32.
generate_storage_alias!(Prefix, StorageName => Value<u32>);

// generate a double map from `(u32, u32)` (with hashers `Twox64Concat` for each key)
// to `Vec<u8>`
generate_storage_alias!(
	OtherPrefix, OtherStorageName => DoubleMap<
		(u32, Twox64Concat),
		(u32, Twox64Concat),
		Vec<u8>
	>
);

// optionally specify the query type
use frame_support::pallet_prelude::{ValueQuery, OptionQuery};
generate_storage_alias!(Prefix, ValueName => Value<u32, OptionQuery>);
generate_storage_alias!(
	Prefix, SomeStorageName => DoubleMap<
		(u32, Twox64Concat),
		(u32, Twox64Concat),
		Vec<u8>,
		ValueQuery
	>
);

// 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>>
);