macro_rules! parameter_types {
    (
		$( #[ $attr:meta ] )*
		$vis:vis const $name:ident: $type:ty = $value:expr;
		$( $rest:tt )*
	) => { ... };
    (
		$( #[ $attr:meta ] )*
		$vis:vis $name:ident: $type:ty = $value:expr;
		$( $rest:tt )*
	) => { ... };
    () => { ... };
    (@IMPL_CONST $name:ident, $type:ty, $value:expr) => { ... };
    (@IMPL $name:ident, $type:ty, $value:expr) => { ... };
}
Expand description

Create new implementations of the Get trait.

The so-called parameter type can be created in four different ways:

  • Using const to create a parameter type that provides a const getter. It is required that the value is const.

  • Declare the parameter type without const to have more freedom when creating the value.

NOTE: A more substantial version of this macro is available in frame_support crate which allows mutable and persistant variants.

Examples

// This function cannot be used in a const context.
fn non_const_expression() -> u64 { 99 }

const FIXED_VALUE: u64 = 10;
parameter_types! {
   pub const Argument: u64 = 42 + FIXED_VALUE;
   /// Visibility of the type is optional
   OtherArgument: u64 = non_const_expression();
}

trait Config {
   type Parameter: Get<u64>;
   type OtherParameter: Get<u64>;
}

struct Runtime;
impl Config for Runtime {
   type Parameter = Argument;
   type OtherParameter = OtherArgument;
}

Invalid example:

// This function cannot be used in a const context.
fn non_const_expression() -> u64 { 99 }

parameter_types! {
   pub const Argument: u64 = non_const_expression();
}