One thing I appreciate about writing Rust is that ADT support implies writing parsers is simpler under the "parse don't validate" mindset (which was clarified for me I think in this [0] article).
[0]: https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-va...