spf13 / pflag

Drop-in replacement for Go's flag package, implementing POSIX/GNU-style --flags.
BSD 3-Clause "New" or "Revised" License
2.43k stars 348 forks source link

Generic Value and SliceValue implementation #359

Open mmatczuk opened 2 years ago

mmatczuk commented 2 years ago

Using Go generics it's possible to greatly streamline the process of binding custom value types. I have created a library as a POC github.com/mmatczuk/anyflag. To work with it users have to provide the type and a parser (aka fromString) function.

Example:

    var ba *url.Userinfo
    cmd.Flags().VarP(anyflag.NewValue[*url.Userinfo](nil, &ba, parseBasicAuth), "basic-auth", "", "basic auth")

    var bas []*url.Userinfo
    cmd.Flags().VarP(anyflag.NewSliceValue[*url.Userinfo](nil, &bas, parseBasicAuth), "basic-auth", "", "basic auth")

See full running example in example_test.go.

It's also possible to replace the concrete implementations here with the generic one largely reducing the code surface.

Please let me know what do you think.