referrerpolicy=no-referrer-when-downgrade

frame_support_procedural/pallet/expand/
instances.rs

1// This file is part of Substrate.
2
3// Copyright (C) Parity Technologies (UK) Ltd.
4// SPDX-License-Identifier: Apache-2.0
5
6// Licensed under the Apache License, Version 2.0 (the "License");
7// you may not use this file except in compliance with the License.
8// You may obtain a copy of the License at
9//
10// 	http://www.apache.org/licenses/LICENSE-2.0
11//
12// Unless required by applicable law or agreed to in writing, software
13// distributed under the License is distributed on an "AS IS" BASIS,
14// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15// See the License for the specific language governing permissions and
16// limitations under the License.
17
18use crate::{pallet::Def, NUMBER_OF_INSTANCE};
19use proc_macro2::Span;
20
21///
22/// * Provide inherent instance to be used by construct_runtime
23/// * Provide Instance1 ..= Instance16 for instantiable pallet
24pub fn expand_instances(def: &mut Def) -> proc_macro2::TokenStream {
25	let frame_support = &def.frame_support;
26	let inherent_ident = syn::Ident::new(crate::INHERENT_INSTANCE_NAME, Span::call_site());
27	let instances = if def.config.has_instance {
28		(1..=NUMBER_OF_INSTANCE)
29			.map(|i| syn::Ident::new(&format!("Instance{}", i), Span::call_site()))
30			.collect()
31	} else {
32		vec![]
33	};
34
35	quote::quote!(
36		/// Hidden instance generated to be internally used when module is used without
37		/// instance.
38		#[doc(hidden)]
39		pub type #inherent_ident = ();
40
41		#( pub use #frame_support::instances::#instances; )*
42	)
43}