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:
Bastian Köcher
2019-05-15 11:54:00 +02:00
committed by GitHub
parent 9ea689bdef
commit d50b717ff6
2 changed files with 23 additions and 9 deletions
@@ -198,7 +198,7 @@ fn decl_store_extra_genesis(
let mut is_trait_needed = 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_default = TokenStream2::new();
let mut builders = TokenStream2::new();
@@ -239,9 +239,20 @@ fn decl_store_extra_genesis(
has_trait_field = true;
}
serde_complete_bound.insert(type_infos.value_type);
if let DeclStorageTypeInfosKind::Map { key_type, .. } = type_infos.kind {
serde_complete_bound.insert(key_type);
let value_type = &type_infos.value_type;
serde_complete_bound.push(quote!( #value_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.
@@ -335,7 +346,7 @@ fn decl_store_extra_genesis(
has_trait_field = true;
}
serde_complete_bound.insert(extra_type);
serde_complete_bound.push(quote!( #extra_type ));
let extrafield = &extra_field.content;
genesis_extrafields.extend(quote!{
@@ -363,7 +374,7 @@ fn decl_store_extra_genesis(
let serde_bug_bound = if !serde_complete_bound.is_empty() {
let mut b_ser = String::new();
let mut b_dser = String::new();
// panic!("{:#?}", serde_complete_bound);
serde_complete_bound.into_iter().for_each(|bound| {
let stype = quote!(#bound);
b_ser.push_str(&format!("{} : {}::serde::Serialize, ", stype, scrate));
@@ -515,7 +526,7 @@ fn decl_storage_items(
impls.extend(quote! {
/// Tag a type as an instance of a module.
///
///
/// Defines storage prefixes, they must be unique.
pub trait #instantiable: 'static {
#const_impls
@@ -18,11 +18,11 @@ use runtime_io::{with_externalities, Blake2Hasher};
use srml_support::{StorageValue, StorageMap, StorageDoubleMap};
use srml_support::storage::unhashed;
use srml_support::runtime_primitives::BuildStorage;
use parity_codec::Encode;
use parity_codec::{Encode, Decode};
pub trait Trait {
type Origin;
type BlockNumber;
type BlockNumber: Encode + Decode + Default + Clone;
}
srml_support::decl_module! {
@@ -41,6 +41,9 @@ srml_support::decl_storage!{
pub DoubleMap: double_map u32, blake2_256(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>;
}
}