Macro schema

Source
macro_rules! schema {
    ($($tt:tt)*) => { ... };
}
Expand description

Constructs a TransactionSchema from provided tokens.

The schema! macro facilitates the creation of a TransactionSchema by parsing the provided tokens and assembling the structure. This macro simplifies schema construction by allowing inline specification of schema elements, including instruction types and associated names.

§Syntax

The schema! macro uses a flexible token-based syntax, enabling you to define schema nodes inline. Nodes are defined in a hierarchical manner, with keywords like any indicating schema branches, followed by instruction types, string identifiers, and additional attributes or sub-nodes as needed.

§Example

use carbon_macros::schema;
use carbon_macros::schema_inner;

let transaction_schema = schema![
    any
    [
        AllInstructionTypes::JupSwap(JupiterInstructionType::SwapEvent),
        "jup_swap_event",
        []
    ]
    any
];

§Parameters

  • $tt: The token stream passed to the macro, which may include multiple schema nodes and attributes. These tokens are parsed to construct the schema tree, forming a TransactionSchema object with a root node containing the specified elements.

§Returns

This macro returns a TransactionSchema instance with the constructed schema tree based on the tokens provided. The schema is organized with nodes added to the root, allowing for complex, multi-layered transaction structures, which represent real transaction instructions, in order.

§Notes

  • This macro requires that the inner macro schema_inner! is also defined, as it handles the recursive parsing and node addition to the schema.
  • Ensure that types and keywords used within the schema correspond to valid identifiers and instructions expected by TransactionSchema. Inconsistent tokens may lead to compilation errors or incorrect schema construction.