Skip to content
Snippets Groups Projects
Commit 4792a380 authored by thiolliere's avatar thiolliere Committed by GitHub
Browse files

use custom `ext::Opt` for default_value in `DeclStorageLine` (#1722)

instead of ext::Seq
parent 0da92bf1
No related merge requests found
......@@ -65,8 +65,8 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
spec_name: create_runtime_str!("node"),
impl_name: create_runtime_str!("substrate-node"),
authoring_version: 10,
spec_version: 23,
impl_version: 23,
spec_version: 24,
impl_version: 24,
apis: RUNTIME_API_VERSIONS,
};
......
No preview for this file type
......@@ -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);
}
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment