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.