macro_rules! schema_inner {
($nodes:expr, ) => { ... };
($nodes:expr, any $($rest:tt)*) => { ... };
($nodes:expr, [$ix_type:expr, $name:expr] $($rest:tt)*) => { ... };
($nodes:expr, [$ix_type:expr, $name:expr, [$($inner:tt)*]] $($rest:tt)*) => { ... };
}
Expand description
Recursively constructs schema nodes within the schema!
macro.
The schema_inner!
macro is utilized internally by the schema!
macro to
build a TransactionSchema
structure by parsing tokens into individual
SchemaNode
elements. This macro supports multiple node types, including
Any
nodes and Instruction
nodes with optional nested instructions. Each
parsed node is appended to the provided vector, forming a hierarchical
schema structure.
§Syntax
This macro supports three main syntax patterns:
any
: Adds anAny
node to the schema, indicating a branch point that accepts multiple instructions of any type.[$ix_type:expr, $name:expr]
: Adds anInstruction
node with the specified instruction type and name, without nested instructions.[$ix_type:expr, $name:expr, [$($inner:tt)*]]
: Adds anInstruction
node with the specified instruction type and name, including inner instructions which are parsed recursively.
§Parameters
$nodes
: A mutable reference to aVec<SchemaNode>
. This vector accumulates the constructed schema nodes, which can include bothAny
andInstruction
node variants with nested instructions.$ix_type
: The instruction type for the node, provided as an expression. This identifies the specific instruction type in the schema.$name
: A string literal representing the name of the instruction. This name is associated with theInstruction
node for identification.
§Returns
This macro modifies the Vec<SchemaNode>
passed as $nodes
, adding each
parsed SchemaNode
to the vector. Nodes can be nested, with the structure
reflecting any provided inner instructions.
§Notes
- This macro is intended for internal use within the
schema!
macro and is not typically called directly by users. - Ensure that each
$ix_type
corresponds to a valid instruction type and that$name
is a string literal for compatibility withInstructionSchemaNode
. - The recursive structure allows for complex, multi-level instruction schemas suitable for detailed transaction validation and processing.