Procedural macros take a list of tokens, and you give a list of tokens back, and they're then compiled.
https://doc.rust-lang.org/stable/book/ch19-06-macros.html#ho... (starts with derive, then moves on to attributes. Function-like ones aren't stable yet)