My recommendation is to start with an option 3: pure data description and manual composition/function calls with no magic. You can add a convenience layer on top after you have a very clear idea of how things should compose and be organized.
Edit: I’d look at NimbleOptions for API inspiration.






















