mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 12:11:09 +00:00
use custom ext::Opt for default_value in DeclStorageLine (#1722)
instead of ext::Seq
This commit is contained in:
@@ -74,8 +74,7 @@ struct AddExtraGenesisLine {
|
||||
pub extra_field: ext::Parens<Ident>,
|
||||
pub coldot_token: Token![:],
|
||||
pub extra_type: syn::Type,
|
||||
// FIXME #1570: use a custom ext::Option instead (syn option on '=' fails)
|
||||
pub default_value: ext::Seq<DeclStorageDefault>,
|
||||
pub default_value: ext::Opt<DeclStorageDefault>,
|
||||
}
|
||||
|
||||
#[derive(Parse, ToTokens, Debug)]
|
||||
@@ -91,8 +90,7 @@ struct DeclStorageLine {
|
||||
pub build: Option<DeclStorageBuild>,
|
||||
pub coldot_token: Token![:],
|
||||
pub storage_type: DeclStorageType,
|
||||
// FIXME #1570: use a custom ext::Option instead (syn option on '=' fails)
|
||||
pub default_value: ext::Seq<DeclStorageDefault>,
|
||||
pub default_value: ext::Opt<DeclStorageDefault>,
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@ fn decl_store_extra_genesis(
|
||||
config_field.extend(quote!( pub #ident: #storage_type, ));
|
||||
opt_build = Some(build.as_ref().map(|b| &b.expr.content).map(|b|quote!( #b ))
|
||||
.unwrap_or_else(|| quote!( (|config: &GenesisConfig<#traitinstance>| config.#ident.clone()) )));
|
||||
let fielddefault = default_value.inner.get(0).as_ref().map(|d| &d.expr).map(|d|
|
||||
let fielddefault = default_value.inner.as_ref().map(|d| &d.expr).map(|d|
|
||||
if type_infos.is_option {
|
||||
quote!( #d.unwrap_or_default() )
|
||||
} else {
|
||||
@@ -270,7 +270,7 @@ fn decl_store_extra_genesis(
|
||||
genesis_extrafields.extend(quote!{
|
||||
#attrs pub #extrafield: #extra_type,
|
||||
});
|
||||
let extra_default = default_value.inner.get(0).map(|d| &d.expr).map(|e| quote!{ #e })
|
||||
let extra_default = default_value.inner.as_ref().map(|d| &d.expr).map(|e| quote!{ #e })
|
||||
.unwrap_or_else(|| quote!( Default::default() ));
|
||||
genesis_extrafields_default.extend(quote!{
|
||||
#extrafield: #extra_default,
|
||||
@@ -403,7 +403,7 @@ fn decl_storage_items(
|
||||
|
||||
let type_infos = get_type_infos(storage_type);
|
||||
let gettype = type_infos.full_type;
|
||||
let fielddefault = default_value.inner.get(0).as_ref().map(|d| &d.expr).map(|d| quote!( #d ))
|
||||
let fielddefault = default_value.inner.as_ref().map(|d| &d.expr).map(|d| quote!( #d ))
|
||||
.unwrap_or_else(|| quote!{ Default::default() });
|
||||
|
||||
let typ = type_infos.typ;
|
||||
@@ -643,7 +643,7 @@ fn store_functions_to_metadata (
|
||||
#scrate::storage::generator::StorageFunctionModifier::Default
|
||||
}
|
||||
};
|
||||
let default = default_value.inner.get(0).as_ref().map(|d| &d.expr)
|
||||
let default = default_value.inner.as_ref().map(|d| &d.expr)
|
||||
.map(|d| {
|
||||
quote!( #d )
|
||||
})
|
||||
|
||||
@@ -191,33 +191,25 @@ impl ToTokens for OuterAttributes {
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Seq<P> {
|
||||
pub inner: Vec<P>,
|
||||
pub struct Opt<P> {
|
||||
pub inner: Option<P>,
|
||||
}
|
||||
|
||||
impl<P: Parse> Parse for Seq<P> {
|
||||
impl<P: Parse> Parse for Opt<P> {
|
||||
// Note that it cost a double parsing (same as enum derive)
|
||||
fn parse(input: ParseStream) -> Result<Self> {
|
||||
let mut inner = Vec::new();
|
||||
loop {
|
||||
let fork = input.fork();
|
||||
let res: Result<P> = fork.parse();
|
||||
match res {
|
||||
Ok(_item) => {
|
||||
// move cursor
|
||||
let item: P = input.parse().expect("Same parsing ran before");
|
||||
inner.push(item);
|
||||
},
|
||||
Err(_e) => break,
|
||||
}
|
||||
}
|
||||
Ok(Seq { inner })
|
||||
let inner = match input.fork().parse::<P>() {
|
||||
Ok(_item) => Some(input.parse().expect("Same parsing ran before")),
|
||||
Err(_e) => None,
|
||||
};
|
||||
|
||||
Ok(Opt { inner })
|
||||
}
|
||||
}
|
||||
|
||||
impl<P: ToTokens> ToTokens for Seq<P> {
|
||||
impl<P: ToTokens> ToTokens for Opt<P> {
|
||||
fn to_tokens(&self, tokens: &mut T2) {
|
||||
for p in self.inner.iter() {
|
||||
if let Some(ref p) = self.inner {
|
||||
p.to_tokens(tokens);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user