Argu is a great library to read program arguments in F#.
But in case of modularization, is it possible somehow to merge different arguments without subcommands? Let’s say you have a bunch of command line backends, implemented as modules in one program: a POS cash register, a kitchen order viewer, and a customer database. Each of them may have their service arguments like network address to listen on and a port. And each of them have their own settings, a fixed waiter for the POS or sth like that.
My current implementation is
type ServiceArguments =
| Rest_Service of RestHost: string * RestPort: uint16
interface IArgParserTemplate with
type PosArguments =
| [<AltCommandLine("-w")>] [<EqualsAssignmentOrSpaced>] Waiter of uint
interface IArgParserTemplate with
type ClientArguments =
| ServiceArguments of service: ServiceArguments
| PosArguments of pos: PosArguments
interface IArgParserTemplate with
I assume there is some kind of interceptor function in Argu, which I could implement. Or should I collect all known arguments for each interface and then provide it to the sub modules? Or is the only way to use subcommands? Feels a bit strange, though.
1