use super::helper;
use syn::spanned::Spanned;
pub struct GenesisBuildDef {
pub instances: Option<Vec<helper::InstanceUsage>>,
pub where_clause: Option<syn::WhereClause>,
pub attr_span: proc_macro2::Span,
}
impl GenesisBuildDef {
pub fn try_from(attr_span: proc_macro2::Span, item: &mut syn::Item) -> syn::Result<Self> {
let item = if let syn::Item::Impl(item) = item {
item
} else {
let msg = "Invalid pallet::genesis_build, expected item impl";
return Err(syn::Error::new(item.span(), msg));
};
let item_trait = &item
.trait_
.as_ref()
.ok_or_else(|| {
let msg = "Invalid pallet::genesis_build, expected impl<..> GenesisBuild<..> \
for GenesisConfig<..>";
syn::Error::new(item.span(), msg)
})?
.1;
let instances =
helper::check_genesis_builder_usage(item_trait)?.map(|instances| vec![instances]);
Ok(Self { attr_span, instances, where_clause: item.generics.where_clause.clone() })
}
}