TODO: Remove all this bullshit like rng.h, keep pointer, current boxed, and util; keep the error stuff and get a consistent framework for it but then work on the ruleset, rule definitions, making it ergonomic and `constinit`, etc. The actual real reason this project exists... Then add things like `iterator` to use for parsing, and `argument_{input/output}_stream` for transformations, etc. See notes on phone for custom handlers as well. Use as much aggregate (POD) init as possible, e.g: ``` // with rule ctor for `(char8_t, const char &(desc)[DN], kind, attribute = {})` // ... { 'v', "Increase verbosity" , kind::Switch, { .allow_multuple = 3 }}, // ... ```