Expand description
§Schema Module
The schema module provides macros for constructing and organizing transaction schemas
in a hierarchical manner. These macros are designed to simplify the creation of complex
transaction structures by allowing inline specification of schema elements, which represent instructions
within transactions.
§Overview
This module includes two primary macros:
schema!: The main macro for constructing aTransactionSchema, which is a hierarchical schema representation.schema_inner!: A helper macro, used internally byschema!for recursive schema node construction.
Together, these macros enable you to define schema nodes in a flexible and intuitive manner,
allowing for combinations of Any and Instruction nodes with optional nested instructions.
§Key Macros
§schema!
The schema! macro is the primary entry point for constructing a TransactionSchema.
It parses provided tokens into a TransactionSchema object, allowing inline definition
of various schema elements in a tree-like structure. This macro supports keywords like
any to create branches that can match multiple instruction types.
§Example
use your_crate::schema;
let transaction_schema = schema![
any,
[
AllInstructionTypes::JupSwap(JupiterInstructionType::SwapEvent),
"jup_swap_event",
[]
],
any,
];This example defines a schema with an any branch, an Instruction node with nested
instructions, and another any branch, creating a flexible transaction structure.
In practical terms, this means that the schema represents a transaction that has a Jupiter Swap Event
instruction anywhere within the transaction.
§schema_inner!
This macro is used internally by schema! to build out individual SchemaNode elements.
It supports three main syntax patterns: any, single Instruction nodes, and nested Instruction
nodes. Users typically don’t need to interact with this macro directly, as it’s invoked by schema!
to handle recursive node construction.
§Supported Syntax Patterns
any: Adds anAnynode, which can match any instruction type, multiple times.[$ix_type:expr, $name:expr]: Adds anInstructionnode without nested instructions.[$ix_type:expr, $name:expr, [$($inner:tt)*]]: Adds anInstructionnode with nested inner instructions.
§Notes
- The
schema!macro relies onschema_inner!for recursive parsing and node creation. - When using the
schema!macro, ensure that all instruction types and identifiers correspond to valid values expected by theTransactionSchemato avoid compilation errors.
§Crate Dependencies
This module relies on components like SchemaNode and InstructionSchemaNode to build the schema tree.
Make sure these types are defined and accessible within the scope of the module’s usage.