mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-25 10:35:48 +00:00
Generate correct serde bound for GenesisConfig (#2585)
* Generate correct serde bound for GenesisConfig * Handle double map as well * Adapt double map test
This commit is contained in:
@@ -198,7 +198,7 @@ fn decl_store_extra_genesis(
|
|||||||
|
|
||||||
let mut is_trait_needed = false;
|
let mut is_trait_needed = false;
|
||||||
let mut has_trait_field = false;
|
let mut has_trait_field = false;
|
||||||
let mut serde_complete_bound = std::collections::HashSet::new();
|
let mut serde_complete_bound = Vec::new();
|
||||||
let mut config_field = TokenStream2::new();
|
let mut config_field = TokenStream2::new();
|
||||||
let mut config_field_default = TokenStream2::new();
|
let mut config_field_default = TokenStream2::new();
|
||||||
let mut builders = TokenStream2::new();
|
let mut builders = TokenStream2::new();
|
||||||
@@ -239,9 +239,20 @@ fn decl_store_extra_genesis(
|
|||||||
has_trait_field = true;
|
has_trait_field = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
serde_complete_bound.insert(type_infos.value_type);
|
let value_type = &type_infos.value_type;
|
||||||
if let DeclStorageTypeInfosKind::Map { key_type, .. } = type_infos.kind {
|
serde_complete_bound.push(quote!( #value_type ));
|
||||||
serde_complete_bound.insert(key_type);
|
match type_infos.kind {
|
||||||
|
DeclStorageTypeInfosKind::Map { key_type, .. } =>
|
||||||
|
serde_complete_bound.push(quote!( #key_type )),
|
||||||
|
DeclStorageTypeInfosKind::DoubleMap { key1_type, key2_type, .. } => {
|
||||||
|
serde_complete_bound.push(quote!( #key1_type ));
|
||||||
|
serde_complete_bound.push(quote!( #key2_type ));
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
|
|
||||||
|
if type_infos.is_option {
|
||||||
|
serde_complete_bound.push(type_infos.typ.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Propagate doc attributes.
|
// Propagate doc attributes.
|
||||||
@@ -335,7 +346,7 @@ fn decl_store_extra_genesis(
|
|||||||
has_trait_field = true;
|
has_trait_field = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
serde_complete_bound.insert(extra_type);
|
serde_complete_bound.push(quote!( #extra_type ));
|
||||||
|
|
||||||
let extrafield = &extra_field.content;
|
let extrafield = &extra_field.content;
|
||||||
genesis_extrafields.extend(quote!{
|
genesis_extrafields.extend(quote!{
|
||||||
@@ -363,7 +374,7 @@ fn decl_store_extra_genesis(
|
|||||||
let serde_bug_bound = if !serde_complete_bound.is_empty() {
|
let serde_bug_bound = if !serde_complete_bound.is_empty() {
|
||||||
let mut b_ser = String::new();
|
let mut b_ser = String::new();
|
||||||
let mut b_dser = String::new();
|
let mut b_dser = String::new();
|
||||||
// panic!("{:#?}", serde_complete_bound);
|
|
||||||
serde_complete_bound.into_iter().for_each(|bound| {
|
serde_complete_bound.into_iter().for_each(|bound| {
|
||||||
let stype = quote!(#bound);
|
let stype = quote!(#bound);
|
||||||
b_ser.push_str(&format!("{} : {}::serde::Serialize, ", stype, scrate));
|
b_ser.push_str(&format!("{} : {}::serde::Serialize, ", stype, scrate));
|
||||||
|
|||||||
@@ -18,11 +18,11 @@ use runtime_io::{with_externalities, Blake2Hasher};
|
|||||||
use srml_support::{StorageValue, StorageMap, StorageDoubleMap};
|
use srml_support::{StorageValue, StorageMap, StorageDoubleMap};
|
||||||
use srml_support::storage::unhashed;
|
use srml_support::storage::unhashed;
|
||||||
use srml_support::runtime_primitives::BuildStorage;
|
use srml_support::runtime_primitives::BuildStorage;
|
||||||
use parity_codec::Encode;
|
use parity_codec::{Encode, Decode};
|
||||||
|
|
||||||
pub trait Trait {
|
pub trait Trait {
|
||||||
type Origin;
|
type Origin;
|
||||||
type BlockNumber;
|
type BlockNumber: Encode + Decode + Default + Clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
srml_support::decl_module! {
|
srml_support::decl_module! {
|
||||||
@@ -41,6 +41,9 @@ srml_support::decl_storage!{
|
|||||||
|
|
||||||
pub DoubleMap: double_map u32, blake2_256(u32) => u32;
|
pub DoubleMap: double_map u32, blake2_256(u32) => u32;
|
||||||
pub DoubleMap2: double_map hasher(twox_128) u32, blake2_128(u32) => u32;
|
pub DoubleMap2: double_map hasher(twox_128) u32, blake2_128(u32) => u32;
|
||||||
|
|
||||||
|
pub Foo get(foo) config(): Option<T::BlockNumber>;
|
||||||
|
pub Foo2 get(foo2) config(): double_map u32, blake2_256(T::BlockNumber) => Option<u32>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user