It depends on what you're looking for. Based on my usage of Rust, I would say that it's proc_macro system is more than capable enough for use-cases like this, and macro_rules migth even be enough.
But lots of languages offer similar capabilities, Nim, Racket, Scala, Julia, Lisp, etc.