mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-01 18:17:56 +00:00
Implement a CountedStorageMap (#9125)
* initial impl * expose in pallet_prelude * temp test * Apply suggestions from code review Co-authored-by: Peter Goodspeed-Niklaus <coriolinus@users.noreply.github.com> Co-authored-by: Xiliang Chen <xlchen1291@gmail.com> * implement with macro help. * test for macro generation * add iterable functions, some test and fixes * fix merge * doc * Update frame/support/src/storage/types/counted_map.rs Co-authored-by: Zeke Mostov <32168567+emostov@users.noreply.github.com> * fix merge * fmt * fix spelling * improve on removal * fix partial storage info * fmt * add license * suggested renames * fix typo * fix test * fmt * fix ui tests * clearer doc * better doc * add metadata test Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com> Co-authored-by: Peter Goodspeed-Niklaus <coriolinus@users.noreply.github.com> Co-authored-by: Xiliang Chen <xlchen1291@gmail.com> Co-authored-by: Zeke Mostov <32168567+emostov@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
49b6dfd2e5
commit
65e5fa3aa3
@@ -86,6 +86,7 @@ impl syn::parse::Parse for PalletStorageAttr {
|
||||
pub enum Metadata {
|
||||
Value { value: syn::Type },
|
||||
Map { value: syn::Type, key: syn::Type },
|
||||
CountedMap { value: syn::Type, key: syn::Type },
|
||||
DoubleMap { value: syn::Type, key1: syn::Type, key2: syn::Type },
|
||||
NMap { keys: Vec<syn::Type>, keygen: syn::Type, value: syn::Type },
|
||||
}
|
||||
@@ -153,6 +154,14 @@ pub enum StorageGenerics {
|
||||
on_empty: Option<syn::Type>,
|
||||
max_values: Option<syn::Type>,
|
||||
},
|
||||
CountedMap {
|
||||
hasher: syn::Type,
|
||||
key: syn::Type,
|
||||
value: syn::Type,
|
||||
query_kind: Option<syn::Type>,
|
||||
on_empty: Option<syn::Type>,
|
||||
max_values: Option<syn::Type>,
|
||||
},
|
||||
Value {
|
||||
value: syn::Type,
|
||||
query_kind: Option<syn::Type>,
|
||||
@@ -173,6 +182,7 @@ impl StorageGenerics {
|
||||
let res = match self.clone() {
|
||||
Self::DoubleMap { value, key1, key2, .. } => Metadata::DoubleMap { value, key1, key2 },
|
||||
Self::Map { value, key, .. } => Metadata::Map { value, key },
|
||||
Self::CountedMap { value, key, .. } => Metadata::CountedMap { value, key },
|
||||
Self::Value { value, .. } => Metadata::Value { value },
|
||||
Self::NMap { keygen, value, .. } =>
|
||||
Metadata::NMap { keys: collect_keys(&keygen)?, keygen, value },
|
||||
@@ -186,6 +196,7 @@ impl StorageGenerics {
|
||||
match &self {
|
||||
Self::DoubleMap { query_kind, .. } |
|
||||
Self::Map { query_kind, .. } |
|
||||
Self::CountedMap { query_kind, .. } |
|
||||
Self::Value { query_kind, .. } |
|
||||
Self::NMap { query_kind, .. } => query_kind.clone(),
|
||||
}
|
||||
@@ -195,6 +206,7 @@ impl StorageGenerics {
|
||||
enum StorageKind {
|
||||
Value,
|
||||
Map,
|
||||
CountedMap,
|
||||
DoubleMap,
|
||||
NMap,
|
||||
}
|
||||
@@ -324,6 +336,33 @@ fn process_named_generics(
|
||||
max_values: parsed.remove("MaxValues").map(|binding| binding.ty),
|
||||
}
|
||||
},
|
||||
StorageKind::CountedMap => {
|
||||
check_generics(
|
||||
&parsed,
|
||||
&["Hasher", "Key", "Value"],
|
||||
&["QueryKind", "OnEmpty", "MaxValues"],
|
||||
"CountedStorageMap",
|
||||
args_span,
|
||||
)?;
|
||||
|
||||
StorageGenerics::CountedMap {
|
||||
hasher: parsed
|
||||
.remove("Hasher")
|
||||
.map(|binding| binding.ty)
|
||||
.expect("checked above as mandatory generic"),
|
||||
key: parsed
|
||||
.remove("Key")
|
||||
.map(|binding| binding.ty)
|
||||
.expect("checked above as mandatory generic"),
|
||||
value: parsed
|
||||
.remove("Value")
|
||||
.map(|binding| binding.ty)
|
||||
.expect("checked above as mandatory generic"),
|
||||
query_kind: parsed.remove("QueryKind").map(|binding| binding.ty),
|
||||
on_empty: parsed.remove("OnEmpty").map(|binding| binding.ty),
|
||||
max_values: parsed.remove("MaxValues").map(|binding| binding.ty),
|
||||
}
|
||||
},
|
||||
StorageKind::DoubleMap => {
|
||||
check_generics(
|
||||
&parsed,
|
||||
@@ -425,6 +464,11 @@ fn process_unnamed_generics(
|
||||
Metadata::Map { key: retrieve_arg(2)?, value: retrieve_arg(3)? },
|
||||
retrieve_arg(4).ok(),
|
||||
),
|
||||
StorageKind::CountedMap => (
|
||||
None,
|
||||
Metadata::CountedMap { key: retrieve_arg(2)?, value: retrieve_arg(3)? },
|
||||
retrieve_arg(4).ok(),
|
||||
),
|
||||
StorageKind::DoubleMap => (
|
||||
None,
|
||||
Metadata::DoubleMap {
|
||||
@@ -451,6 +495,7 @@ fn process_generics(
|
||||
let storage_kind = match &*segment.ident.to_string() {
|
||||
"StorageValue" => StorageKind::Value,
|
||||
"StorageMap" => StorageKind::Map,
|
||||
"CountedStorageMap" => StorageKind::CountedMap,
|
||||
"StorageDoubleMap" => StorageKind::DoubleMap,
|
||||
"StorageNMap" => StorageKind::NMap,
|
||||
found => {
|
||||
|
||||
Reference in New Issue
Block a user