Expand description

Allows defining an enum that gets composed as an aggregate enum by construct_runtime.

The #[pallet::composite_enum] attribute allows you to define an enum that gets composed as an aggregate enum by construct_runtime. This is similar in principle with frame_support_procedural::event and frame_support_procedural::error.

The attribute currently only supports enum definitions, and identifiers that are named FreezeReason, HoldReason, LockId or SlashReason. Arbitrary identifiers for the enum are not supported. The aggregate enum generated by frame_support::construct_runtime will have the name of RuntimeFreezeReason, RuntimeHoldReason, RuntimeLockId and RuntimeSlashReason respectively.

NOTE: The aggregate enum generated by construct_runtime generates a conversion function from the pallet enum to the aggregate enum, and automatically derives the following traits:

Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, MaxEncodedLen, TypeInfo,

For ease of usage, when no #[derive] attributes are found for the enum under #[pallet::composite_enum], the aforementioned traits are automatically derived for it. The inverse is also true: if there are any #[derive] attributes found for the enum, then no traits will automatically be derived for it.

e.g, defining HoldReason in a pallet

mod pallet {
	pub struct Pallet<T>(_);

	pub enum HoldReason {
		/// The NIS Pallet has reserved it for a non-fungible receipt.
		#[codec(index = 0)]
		#[codec(index = 1)]


Documentation for this macro can be found at `frame_support::pallet_macros::composite_enum`.