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}