The DSL is basically just Rust structs with optional fields. We essentially use the same struct parser rust uses but with some small tweaks.
You want to use a macro for this so you can do hot-reloading - doing it with native Rust is currently impractical for rapid dev.