Comment by nitnelave
For CLI arguments, have you checked out clap? It's declarative (you create and annotate a struct, it generates the parser), and can be agremented with man page generation or shell completion generation.
And as a result of the parsing step, you get a fully typed struct