How Marlin Works
Marlin uses procedural macros to generate a Rust wrapper over dynamically-linked symbols generated by a hardware simulator (in this case, verilator).
Each "bridging" macro calls the helper function build_verilated_struct defined in the marlin-verilog-macro-builder crate.
See also the formal interface in MacroArgs.