frame_support_procedural/pallet/expand/
origin.rs1use crate::{pallet::Def, COUNTER};
19use proc_macro2::TokenStream;
20use quote::quote;
21use syn::{spanned::Spanned, Ident};
22
23pub fn expand_origin(def: &mut Def) -> TokenStream {
25 let count = COUNTER.with(|counter| counter.borrow_mut().inc());
26 let macro_ident = Ident::new(&format!("__is_origin_part_defined_{}", count), def.item.span());
27
28 let maybe_compile_error = if def.origin.is_none() {
29 quote! {
30 compile_error!(concat!(
31 "`",
32 stringify!($pallet_name),
33 "` does not have #[pallet::origin] defined, perhaps you should \
34 remove `Origin` from construct_runtime?",
35 ));
36 }
37 } else {
38 TokenStream::new()
39 };
40
41 quote! {
42 #[doc(hidden)]
43 pub mod __substrate_origin_check {
44 #[macro_export]
45 #[doc(hidden)]
46 macro_rules! #macro_ident {
47 ($pallet_name:ident) => {
48 #maybe_compile_error
49 }
50 }
51
52 #[doc(hidden)]
53 pub use #macro_ident as is_origin_part_defined;
54 }
55 }
56}