macro_rules! args {
( @started $args:ident $(,)* ) => { ... };
(
@started $args:ident
$parameter:tt : $argument:expr $(,)*
) => { ... };
(
@started $args:ident
$argument:expr $(,)*
) => { ... };
(
@started $args:ident
$parameter:tt : $argument:expr
, $( $remaining_arguments:tt )+
) => { ... };
(
@started $args:ident
$argument:expr
, $( $remaining_arguments:tt )*
) => { ... };
( $( $arguments:tt )* ) => { ... };
}
Expand description
Helper macro to create a list of arguments in an Arguments
instance.
Accepts items separated by commas, where an item is either:
- a lone argument obtained from an expression
- a key-value pair in the form
"key": value_expression
The items are added to a new Arguments
instance in order.
§Implementation details
This macro is called recursively, and can run into a macro recursion limit if the list of items is very long.
The first step of the macro is to create a new scope with an args
binding to a new empty
Arguments
list. That binding is returned from the scope, so the macro’s generated code is an
expression that creates the argument list. Once the scope is created, a @started
tag is
prefixed to the recursive calls, which then individually add each item.