Macro frame_support::parameter_types
source · macro_rules! parameter_types { ( $( #[ $attr:meta ] )* $vis:vis const $name:ident $(< $($ty_params:ident),* >)?: $type:ty = $value:expr; $( $rest:tt )* ) => { ... }; ( $( #[ $attr:meta ] )* $vis:vis $name:ident $(< $($ty_params:ident),* >)?: $type:ty = $value:expr; $( $rest:tt )* ) => { ... }; ( $( #[ $attr:meta ] )* $vis:vis storage $name:ident $(< $($ty_params:ident),* >)?: $type:ty = $value:expr; $( $rest:tt )* ) => { ... }; () => { ... }; (IMPL_CONST $name:ident, $type:ty, $value:expr $(, $ty_params:ident)*) => { ... }; (IMPL $name:ident, $type:ty, $value:expr $(, $ty_params:ident)*) => { ... }; (IMPL_STORAGE $name:ident, $type:ty, $value:expr $(, $ty_params:ident)*) => { ... }; ( $( #[ $attr:meta ] )* $vis:vis static $name:ident: $type:ty = $value:expr; $( $rest:tt )* ) => { ... }; }
Expand description
Create new implementations of the Get trait.
The so-called parameter type can be created in four different ways:
-
Using
constto create a parameter type that provides aconstgetter. It is required that thevalueis const. -
Declare the parameter type without
constto have more freedom when creating the value. -
Using
storageto create a storage parameter type. This type is special as it tries to load the value from the storage under a fixed key. If the value could not be found in the storage, the given default value will be returned. It is required that the value implementsEncodeandDecode. The key for looking up the value in the storage is built using the following formula:twox_128(":" ++ NAME ++ ":")whereNAMEis the name that is passed as type name. -
Using
staticto create a static parameter type. Its value is being provided by a static variable with the equivalent name inUPPER_SNAKE_CASE. An additionalsetfunction is provided in this case to alter the static variable. This is intended for testing ONLY and is ONLY available whenstdis enabled.
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();
pub storage StorageArgument: u64 = 5;
pub static StaticArgument: u32 = 7;
}
trait Config {
type Parameter: Get<u64>;
type OtherParameter: Get<u64>;
type StorageParameter: Get<u64>;
type StaticParameter: Get<u32>;
}
struct Runtime;
impl Config for Runtime {
type Parameter = Argument;
type OtherParameter = OtherArgument;
type StorageParameter = StorageArgument;
type StaticParameter = StaticArgument;
}
// In testing, `StaticArgument` can be altered later: `StaticArgument::set(8)`.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();
}