[−][src]Crate seq_macro
Imagine for-loops in a macro
This crate provides a seq!
macro to repeat a fragment of source code and
substitute into each repetition a sequential numeric counter.
#![feature(proc_macro_hygiene)] use seq_macro::seq; fn main() { let tuple = (1000, 100, 10); let mut sum = 0; // Expands to: // // sum += tuple.0; // sum += tuple.1; // sum += tuple.2; // // This cannot be written using an ordinary for-loop because elements of // a tuple can only be accessed by their integer literal index, not by a // variable. seq!(N in 0..=2 { sum += tuple.N; }); assert_eq!(sum, 1110); }
There are just two more features to know about:
-
If the input tokens contain a section surrounded by
#(
...)*
then only that part is repeated. -
The numeric counter can be pasted onto the end of some prefix to form sequential identifiers.
use seq_macro::seq; seq!(N in 64..=127 { #[derive(Debug)] enum Demo { // Expands to Variant64, Variant65, ... #( Variant#N, )* } }); fn main() { assert_eq!("Variant99", format!("{:?}", Demo::Variant99)); }
Macros
seq |