Macro sp_runtime::parameter_types
source · 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 aconst
getter. It is required that thevalue
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();
}