mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-03 11:07:25 +00:00
Implement StorageNMap (#8635)
* Implement StorageNMap * Change copyright date to 2021 * Rewrite keys to use impl_for_tuples instead of recursion * Implement prefix iteration on StorageNMap * Implement EncodeLike for key arguments * Rename KeyGenerator::Arg to KeyGenerator::KArg * Support StorageNMap in decl_storage and #[pallet::storage] macros * Use StorageNMap in assets pallet * Support migrate_keys in StorageNMap * Reduce line characters on select files * Refactor crate imports in decl_storage macros * Some more line char reductions and doc comment update * Update UI test expectations * Revert whitespace changes to untouched files * Generate Key struct instead of a 1-tuple when only 1 pair of key and hasher is provided * Revert formatting changes to unrelated files * Introduce KeyGeneratorInner * Add tests for StorageNMap in FRAMEv2 pallet macro * Small fixes to unit tests for StorageNMap * Bump runtime metadata version * Remove unused import * Update tests to use runtime metadata v13 * Introduce and use EncodeLikeTuple as a trait bound for KArg * Add some rustdocs * Revert usage of StorageNMap in assets pallet * Make use of ext::PunctuatedTrailing * Add rustdoc for final_hash * Fix StorageNMap proc macro expansions for single key cases * Create associated const in KeyGenerator for hasher metadata * Refactor code according to comments from Basti * Add module docs for generator/nmap.rs * Re-export storage::Key as NMapKey in pallet prelude * Seal the EncodeLikeTuple trait * Extract sealing code out of key.rs Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
This commit is contained in:
@@ -29,6 +29,7 @@ mod keyword {
|
||||
syn::custom_keyword!(get);
|
||||
syn::custom_keyword!(map);
|
||||
syn::custom_keyword!(double_map);
|
||||
syn::custom_keyword!(nmap);
|
||||
syn::custom_keyword!(opaque_blake2_256);
|
||||
syn::custom_keyword!(opaque_blake2_128);
|
||||
syn::custom_keyword!(blake2_128_concat);
|
||||
@@ -199,6 +200,7 @@ impl_parse_for_opt!(DeclStorageBuild => keyword::build);
|
||||
enum DeclStorageType {
|
||||
Map(DeclStorageMap),
|
||||
DoubleMap(Box<DeclStorageDoubleMap>),
|
||||
NMap(DeclStorageNMap),
|
||||
Simple(syn::Type),
|
||||
}
|
||||
|
||||
@@ -208,6 +210,8 @@ impl syn::parse::Parse for DeclStorageType {
|
||||
Ok(Self::Map(input.parse()?))
|
||||
} else if input.peek(keyword::double_map) {
|
||||
Ok(Self::DoubleMap(input.parse()?))
|
||||
} else if input.peek(keyword::nmap) {
|
||||
Ok(Self::NMap(input.parse()?))
|
||||
} else {
|
||||
Ok(Self::Simple(input.parse()?))
|
||||
}
|
||||
@@ -235,7 +239,21 @@ struct DeclStorageDoubleMap {
|
||||
pub value: syn::Type,
|
||||
}
|
||||
|
||||
#[derive(ToTokens, Debug)]
|
||||
#[derive(Parse, ToTokens, Debug)]
|
||||
struct DeclStorageKey {
|
||||
pub hasher: Opt<SetHasher>,
|
||||
pub key: syn::Type,
|
||||
}
|
||||
|
||||
#[derive(Parse, ToTokens, Debug)]
|
||||
struct DeclStorageNMap {
|
||||
pub map_keyword: keyword::nmap,
|
||||
pub storage_keys: ext::PunctuatedTrailing<DeclStorageKey, Token![,]>,
|
||||
pub ass_keyword: Token![=>],
|
||||
pub value: syn::Type,
|
||||
}
|
||||
|
||||
#[derive(Clone, ToTokens, Debug)]
|
||||
enum Hasher {
|
||||
Blake2_256(keyword::opaque_blake2_256),
|
||||
Blake2_128(keyword::opaque_blake2_128),
|
||||
@@ -291,7 +309,7 @@ impl syn::parse::Parse for Opt<DeclStorageDefault> {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Parse, ToTokens, Debug)]
|
||||
#[derive(Clone, Parse, ToTokens, Debug)]
|
||||
struct SetHasher {
|
||||
pub hasher_keyword: keyword::hasher,
|
||||
pub inner: ext::Parens<Hasher>,
|
||||
@@ -495,6 +513,18 @@ fn parse_storage_line_defs(
|
||||
value: map.value,
|
||||
})
|
||||
),
|
||||
DeclStorageType::NMap(map) => super::StorageLineTypeDef::NMap(
|
||||
super::NMapDef {
|
||||
hashers: map
|
||||
.storage_keys
|
||||
.inner
|
||||
.iter()
|
||||
.map(|pair| Ok(pair.hasher.inner.clone().ok_or_else(no_hasher_error)?.into()))
|
||||
.collect::<Result<Vec<_>, syn::Error>>()?,
|
||||
keys: map.storage_keys.inner.iter().map(|pair| pair.key.clone()).collect(),
|
||||
value: map.value,
|
||||
}
|
||||
),
|
||||
DeclStorageType::Simple(expr) => super::StorageLineTypeDef::Simple(expr),
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user