mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 15:07:59 +00:00
allow storage value build to put no value (#4319)
This commit is contained in:
@@ -44,32 +44,55 @@ impl BuilderDef {
|
||||
let storage_trait = &line.storage_trait;
|
||||
let value_type = &line.value_type;
|
||||
|
||||
// Contains the data to inset at genesis either from build or config.
|
||||
// Defines the data variable to use for insert at genesis either from build or config.
|
||||
let mut data = None;
|
||||
|
||||
if let Some(builder) = &line.build {
|
||||
is_generic |= ext::expr_contains_ident(&builder, &def.module_runtime_generic);
|
||||
is_generic |= line.is_generic;
|
||||
|
||||
data = Some(quote_spanned!(builder.span() => &(#builder)(self)));
|
||||
data = Some(match &line.storage_type {
|
||||
StorageLineTypeDef::Simple(_) if line.is_option =>
|
||||
quote_spanned!(builder.span() =>
|
||||
let data = (#builder)(self);
|
||||
let data = Option::as_ref(&data);
|
||||
),
|
||||
_ => quote_spanned!(builder.span() => let data = &(#builder)(self); ),
|
||||
});
|
||||
} else if let Some(config) = &line.config {
|
||||
is_generic |= line.is_generic;
|
||||
|
||||
data = Some(quote!(&self.#config;));
|
||||
data = Some(match &line.storage_type {
|
||||
StorageLineTypeDef::Simple(_) if line.is_option =>
|
||||
quote!( let data = Some(&self.#config); ),
|
||||
_ => quote!( let data = &self.#config; ),
|
||||
});
|
||||
};
|
||||
|
||||
if let Some(data) = data {
|
||||
blocks.push(match &line.storage_type {
|
||||
StorageLineTypeDef::Simple(_) => {
|
||||
StorageLineTypeDef::Simple(_) if line.is_option => {
|
||||
quote!{{
|
||||
let v: &#value_type = #data;
|
||||
#data
|
||||
let v: Option<&#value_type>= data;
|
||||
if let Some(v) = v {
|
||||
<#storage_struct as #scrate::#storage_trait>::put::<&#value_type>(v);
|
||||
}
|
||||
}}
|
||||
},
|
||||
StorageLineTypeDef::Simple(_) if !line.is_option => {
|
||||
quote!{{
|
||||
#data
|
||||
let v: &#value_type = data;
|
||||
<#storage_struct as #scrate::#storage_trait>::put::<&#value_type>(v);
|
||||
}}
|
||||
},
|
||||
StorageLineTypeDef::Simple(_) => unreachable!(),
|
||||
StorageLineTypeDef::Map(map) | StorageLineTypeDef::LinkedMap(map) => {
|
||||
let key = &map.key;
|
||||
quote!{{
|
||||
let data: &#scrate::rstd::vec::Vec<(#key, #value_type)> = #data;
|
||||
#data
|
||||
let data: &#scrate::rstd::vec::Vec<(#key, #value_type)> = data;
|
||||
data.iter().for_each(|(k, v)| {
|
||||
<#storage_struct as #scrate::#storage_trait>::insert::<
|
||||
&#key, &#value_type
|
||||
@@ -81,7 +104,8 @@ impl BuilderDef {
|
||||
let key1 = &map.key1;
|
||||
let key2 = &map.key2;
|
||||
quote!{{
|
||||
let data: &#scrate::rstd::vec::Vec<(#key1, #key2, #value_type)> = #data;
|
||||
#data
|
||||
let data: &#scrate::rstd::vec::Vec<(#key1, #key2, #value_type)> = data;
|
||||
data.iter().for_each(|(k1, k2, v)| {
|
||||
<#storage_struct as #scrate::#storage_trait>::insert::<
|
||||
&#key1, &#key2, &#value_type
|
||||
|
||||
Reference in New Issue
Block a user