Attribute Macro frame_support::pallet_macros::error
source · #[error]
Expand description
The #[pallet::error]
attribute allows you to define an error enum that will be returned
from the dispatchable when an error occurs. The information for this error type is then
stored in metadata.
Item must be defined as:
#[pallet::error]
pub enum Error<T> {
/// $some_optional_doc
$SomeFieldLessVariant,
/// $some_more_optional_doc
$SomeVariantWithOneField(FieldType),
...
}
I.e. a regular enum named Error
, with generic T
and fieldless or multiple-field
variants.
Any field type in the enum variants must implement TypeInfo
in order to be properly used
in the metadata, and its encoded size should be as small as possible, preferably 1 byte in
size in order to reduce storage size. The error enum itself has an absolute maximum encoded
size specified by MAX_MODULE_ERROR_ENCODED_SIZE
.
(1 byte can still be 256 different errors. The more specific the error, the easier it is to diagnose problems and give a better experience to the user. Don’t skimp on having lots of individual error conditions.)
Field types in enum variants must also implement PalletError
, otherwise the pallet will
fail to compile. Rust primitive types have already implemented the PalletError
trait
along with some commonly used stdlib types such as [Option
] and PhantomData
, and hence
in most use cases, a manual implementation is not necessary and is discouraged.
The generic T
must not bound anything and a where
clause is not allowed. That said,
bounds and/or a where clause should not needed for any use-case.
Macro expansion
The macro implements the [Debug
] trait and functions as_u8
using variant position, and
as_str
using variant doc.
The macro also implements From<Error<T>>
for &'static str
and From<Error<T>>
for
DispatchError
.