We currently more or less do what nimble options does, we also misuse a structs in an effort to do so (i.e., we make no use of protocols for our MLLP.Client struct).
It would probably be advantageous to switch to nimble options to validate our keys and simply use a map for internal state.