frame_support_procedural/pallet/parse/
inherent.rs1use super::helper;
19use syn::spanned::Spanned;
20
21pub struct InherentDef {
23 pub instances: Vec<helper::InstanceUsage>,
25}
26
27impl InherentDef {
28 pub fn try_from(item: &mut syn::Item) -> syn::Result<Self> {
29 let item = if let syn::Item::Impl(item) = item {
30 item
31 } else {
32 let msg = "Invalid pallet::inherent, expected item impl";
33 return Err(syn::Error::new(item.span(), msg))
34 };
35
36 if item.trait_.is_none() {
37 let msg = "Invalid pallet::inherent, expected impl<..> ProvideInherent for Pallet<..>";
38 return Err(syn::Error::new(item.span(), msg))
39 }
40
41 if let Some(last) = item.trait_.as_ref().unwrap().1.segments.last() {
42 if last.ident != "ProvideInherent" {
43 let msg = "Invalid pallet::inherent, expected trait ProvideInherent";
44 return Err(syn::Error::new(last.span(), msg))
45 }
46 } else {
47 let msg = "Invalid pallet::inherent, expected impl<..> ProvideInherent for Pallet<..>";
48 return Err(syn::Error::new(item.span(), msg))
49 }
50
51 let instances = vec![
52 helper::check_pallet_struct_usage(&item.self_ty)?,
53 helper::check_impl_gen(&item.generics, item.impl_token.span())?,
54 ];
55
56 Ok(InherentDef { instances })
57 }
58}