Macro bounded_collections::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();
}