Derive Macro parity_scale_codec::MaxEncodedLen

source ·
#[derive(MaxEncodedLen)]
{
    // Attributes available to this derive:
    #[max_encoded_len_mod]
}
Expand description

Derive macro for MaxEncodedLen.

§Examples

#[derive(Encode, MaxEncodedLen)]
struct Example;
#[derive(Encode, MaxEncodedLen)]
struct TupleStruct(u8, u32);

assert_eq!(TupleStruct::max_encoded_len(), u8::max_encoded_len() + u32::max_encoded_len());
#[derive(Encode, MaxEncodedLen)]
enum GenericEnum<T> {
    A,
    B(T),
}

assert_eq!(GenericEnum::<u8>::max_encoded_len(), u8::max_encoded_len() + u8::max_encoded_len());
assert_eq!(GenericEnum::<u128>::max_encoded_len(), u8::max_encoded_len() + u128::max_encoded_len());

§Within other macros

Sometimes the MaxEncodedLen trait and macro are used within another macro, and it can’t be guaranteed that the parity_scale_codec module is available at the call site. In that case, the macro should reexport the parity_scale_codec module and specify the path to the reexport:

pub use parity_scale_codec as codec;

#[derive(Encode, MaxEncodedLen)]
#[codec(crate = $crate::codec)]
struct Example;

Derive parity_scale_codec::MaxEncodedLen for struct and enum.

§Top level attribute

By default the macro will try to bound the types needed to implement MaxEncodedLen, but the bounds can be specified manually with the top level attribute:

#[codec(mel_bound(T: MaxEncodedLen))]