jawher/mow.cli

Request: support enum flags

insasho opened this issue · 2 comments

This library is off to a great start! Support for enumerations is a common feature of flag parsing libraries and it would be great if mow.cli could support this too.

Proposed design:

cmd.EnumOpt("format", "printable", []string{"printable", "binary"}, "help text")

Per-option help text could be set via the struct variants of the Enum methods.

My specific use case is that I need to add a flag that will support many different values over time but that only currently supports two. For example, the --format flag supports only printable and binary today but it might later need base64. I could use multiple boolean flags but this would require me to implement my own default-value and validation logic (undesirable).

Another use case is the --net flag for docker run:

--net="bridge"   : Set the Network mode for the container
                              'bridge': creates a new network stack for the container on the docker bridge
                              'none': no networking for this container
                              'container:<name|id>': reuses another container network stack
                              'host': use the host network stack inside the container

Thanks.

Thanks for the feedback.

Good proposal, adding it to the to do list.

Not as neat as the builtin type proposed here, but I implemented something similar using the new(ish) custom type feature https://godoc.org/github.com/gwatts/flagvals#OneOfString

eg.

netMode := flagvals.NewOneOfString("bridge", "none", "container", "host)
netMode.Value = "bridge" // set a default
cmd.Var(cli.VarOpt{
    Name: "net",
    Desc: "Set the Network mode for the container.  Either bridge, none, container or host",
    Value: netMode,
})