frame_support_procedural/pallet/parse/
genesis_build.rs1use super::helper;
19use syn::spanned::Spanned;
20
21pub struct GenesisBuildDef {
23 pub instances: Option<Vec<helper::InstanceUsage>>,
25 pub where_clause: Option<syn::WhereClause>,
27 pub attr_span: proc_macro2::Span,
29}
30
31impl GenesisBuildDef {
32 pub fn try_from(attr_span: proc_macro2::Span, item: &mut syn::Item) -> syn::Result<Self> {
33 let item = if let syn::Item::Impl(item) = item {
34 item
35 } else {
36 let msg = "Invalid pallet::genesis_build, expected item impl";
37 return Err(syn::Error::new(item.span(), msg))
38 };
39
40 let item_trait = &item
41 .trait_
42 .as_ref()
43 .ok_or_else(|| {
44 let msg = "Invalid pallet::genesis_build, expected impl<..> GenesisBuild<..> \
45 for GenesisConfig<..>";
46 syn::Error::new(item.span(), msg)
47 })?
48 .1;
49
50 let instances =
51 helper::check_genesis_builder_usage(item_trait)?.map(|instances| vec![instances]);
52
53 Ok(Self { attr_span, instances, where_clause: item.generics.where_clause.clone() })
54 }
55}