Adding flag type generation for altsrc
and a mention of this whole thing in the change log
This commit is contained in:
parent
1f769cfe01
commit
c3b03b8437
@ -3,6 +3,8 @@
|
|||||||
**ATTN**: This project uses [semantic versioning](http://semver.org/).
|
**ATTN**: This project uses [semantic versioning](http://semver.org/).
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
### Added
|
||||||
|
- Flag type code generation via `go generate`
|
||||||
|
|
||||||
## [1.18.0] - 2016-06-27
|
## [1.18.0] - 2016-06-27
|
||||||
### Added
|
### Added
|
||||||
|
3
altsrc/altsrc.go
Normal file
3
altsrc/altsrc.go
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
package altsrc
|
||||||
|
|
||||||
|
//go:generate python ../generate-flag-types altsrc -i ../flag-types.json -o flag_generated.go
|
176
altsrc/flag.go
176
altsrc/flag.go
@ -1,7 +1,6 @@
|
|||||||
package altsrc
|
package altsrc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -63,18 +62,6 @@ func InitInputSourceWithContext(flags []cli.Flag, createInputSource func(context
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenericFlag is the flag type that wraps cli.GenericFlag to allow
|
|
||||||
// for other values to be specified
|
|
||||||
type GenericFlag struct {
|
|
||||||
cli.GenericFlag
|
|
||||||
set *flag.FlagSet
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewGenericFlag creates a new GenericFlag
|
|
||||||
func NewGenericFlag(flag cli.GenericFlag) *GenericFlag {
|
|
||||||
return &GenericFlag{GenericFlag: flag, set: nil}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplyInputSourceValue applies a generic value to the flagSet if required
|
// ApplyInputSourceValue applies a generic value to the flagSet if required
|
||||||
func (f *GenericFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
func (f *GenericFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
||||||
if f.set != nil {
|
if f.set != nil {
|
||||||
@ -94,25 +81,6 @@ func (f *GenericFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourc
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply saves the flagSet for later usage then calls
|
|
||||||
// the wrapped GenericFlag.Apply
|
|
||||||
func (f *GenericFlag) Apply(set *flag.FlagSet) {
|
|
||||||
f.set = set
|
|
||||||
f.GenericFlag.Apply(set)
|
|
||||||
}
|
|
||||||
|
|
||||||
// StringSliceFlag is the flag type that wraps cli.StringSliceFlag to allow
|
|
||||||
// for other values to be specified
|
|
||||||
type StringSliceFlag struct {
|
|
||||||
cli.StringSliceFlag
|
|
||||||
set *flag.FlagSet
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewStringSliceFlag creates a new StringSliceFlag
|
|
||||||
func NewStringSliceFlag(flag cli.StringSliceFlag) *StringSliceFlag {
|
|
||||||
return &StringSliceFlag{StringSliceFlag: flag, set: nil}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplyInputSourceValue applies a StringSlice value to the flagSet if required
|
// ApplyInputSourceValue applies a StringSlice value to the flagSet if required
|
||||||
func (f *StringSliceFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
func (f *StringSliceFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
||||||
if f.set != nil {
|
if f.set != nil {
|
||||||
@ -135,25 +103,6 @@ func (f *StringSliceFlag) ApplyInputSourceValue(context *cli.Context, isc InputS
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply saves the flagSet for later usage then calls
|
|
||||||
// the wrapped StringSliceFlag.Apply
|
|
||||||
func (f *StringSliceFlag) Apply(set *flag.FlagSet) {
|
|
||||||
f.set = set
|
|
||||||
f.StringSliceFlag.Apply(set)
|
|
||||||
}
|
|
||||||
|
|
||||||
// IntSliceFlag is the flag type that wraps cli.IntSliceFlag to allow
|
|
||||||
// for other values to be specified
|
|
||||||
type IntSliceFlag struct {
|
|
||||||
cli.IntSliceFlag
|
|
||||||
set *flag.FlagSet
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewIntSliceFlag creates a new IntSliceFlag
|
|
||||||
func NewIntSliceFlag(flag cli.IntSliceFlag) *IntSliceFlag {
|
|
||||||
return &IntSliceFlag{IntSliceFlag: flag, set: nil}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplyInputSourceValue applies a IntSlice value if required
|
// ApplyInputSourceValue applies a IntSlice value if required
|
||||||
func (f *IntSliceFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
func (f *IntSliceFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
||||||
if f.set != nil {
|
if f.set != nil {
|
||||||
@ -176,25 +125,6 @@ func (f *IntSliceFlag) ApplyInputSourceValue(context *cli.Context, isc InputSour
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply saves the flagSet for later usage then calls
|
|
||||||
// the wrapped IntSliceFlag.Apply
|
|
||||||
func (f *IntSliceFlag) Apply(set *flag.FlagSet) {
|
|
||||||
f.set = set
|
|
||||||
f.IntSliceFlag.Apply(set)
|
|
||||||
}
|
|
||||||
|
|
||||||
// BoolFlag is the flag type that wraps cli.BoolFlag to allow
|
|
||||||
// for other values to be specified
|
|
||||||
type BoolFlag struct {
|
|
||||||
cli.BoolFlag
|
|
||||||
set *flag.FlagSet
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewBoolFlag creates a new BoolFlag
|
|
||||||
func NewBoolFlag(flag cli.BoolFlag) *BoolFlag {
|
|
||||||
return &BoolFlag{BoolFlag: flag, set: nil}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplyInputSourceValue applies a Bool value to the flagSet if required
|
// ApplyInputSourceValue applies a Bool value to the flagSet if required
|
||||||
func (f *BoolFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
func (f *BoolFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
||||||
if f.set != nil {
|
if f.set != nil {
|
||||||
@ -213,25 +143,6 @@ func (f *BoolFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceCo
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply saves the flagSet for later usage then calls
|
|
||||||
// the wrapped BoolFlag.Apply
|
|
||||||
func (f *BoolFlag) Apply(set *flag.FlagSet) {
|
|
||||||
f.set = set
|
|
||||||
f.BoolFlag.Apply(set)
|
|
||||||
}
|
|
||||||
|
|
||||||
// BoolTFlag is the flag type that wraps cli.BoolTFlag to allow
|
|
||||||
// for other values to be specified
|
|
||||||
type BoolTFlag struct {
|
|
||||||
cli.BoolTFlag
|
|
||||||
set *flag.FlagSet
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewBoolTFlag creates a new BoolTFlag
|
|
||||||
func NewBoolTFlag(flag cli.BoolTFlag) *BoolTFlag {
|
|
||||||
return &BoolTFlag{BoolTFlag: flag, set: nil}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplyInputSourceValue applies a BoolT value to the flagSet if required
|
// ApplyInputSourceValue applies a BoolT value to the flagSet if required
|
||||||
func (f *BoolTFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
func (f *BoolTFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
||||||
if f.set != nil {
|
if f.set != nil {
|
||||||
@ -250,26 +161,6 @@ func (f *BoolTFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceC
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply saves the flagSet for later usage then calls
|
|
||||||
// the wrapped BoolTFlag.Apply
|
|
||||||
func (f *BoolTFlag) Apply(set *flag.FlagSet) {
|
|
||||||
f.set = set
|
|
||||||
|
|
||||||
f.BoolTFlag.Apply(set)
|
|
||||||
}
|
|
||||||
|
|
||||||
// StringFlag is the flag type that wraps cli.StringFlag to allow
|
|
||||||
// for other values to be specified
|
|
||||||
type StringFlag struct {
|
|
||||||
cli.StringFlag
|
|
||||||
set *flag.FlagSet
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewStringFlag creates a new StringFlag
|
|
||||||
func NewStringFlag(flag cli.StringFlag) *StringFlag {
|
|
||||||
return &StringFlag{StringFlag: flag, set: nil}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplyInputSourceValue applies a String value to the flagSet if required
|
// ApplyInputSourceValue applies a String value to the flagSet if required
|
||||||
func (f *StringFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
func (f *StringFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
||||||
if f.set != nil {
|
if f.set != nil {
|
||||||
@ -288,26 +179,6 @@ func (f *StringFlag) ApplyInputSourceValue(context *cli.Context, isc InputSource
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply saves the flagSet for later usage then calls
|
|
||||||
// the wrapped StringFlag.Apply
|
|
||||||
func (f *StringFlag) Apply(set *flag.FlagSet) {
|
|
||||||
f.set = set
|
|
||||||
|
|
||||||
f.StringFlag.Apply(set)
|
|
||||||
}
|
|
||||||
|
|
||||||
// IntFlag is the flag type that wraps cli.IntFlag to allow
|
|
||||||
// for other values to be specified
|
|
||||||
type IntFlag struct {
|
|
||||||
cli.IntFlag
|
|
||||||
set *flag.FlagSet
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewIntFlag creates a new IntFlag
|
|
||||||
func NewIntFlag(flag cli.IntFlag) *IntFlag {
|
|
||||||
return &IntFlag{IntFlag: flag, set: nil}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplyInputSourceValue applies a int value to the flagSet if required
|
// ApplyInputSourceValue applies a int value to the flagSet if required
|
||||||
func (f *IntFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
func (f *IntFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
||||||
if f.set != nil {
|
if f.set != nil {
|
||||||
@ -326,25 +197,6 @@ func (f *IntFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceCon
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply saves the flagSet for later usage then calls
|
|
||||||
// the wrapped IntFlag.Apply
|
|
||||||
func (f *IntFlag) Apply(set *flag.FlagSet) {
|
|
||||||
f.set = set
|
|
||||||
f.IntFlag.Apply(set)
|
|
||||||
}
|
|
||||||
|
|
||||||
// DurationFlag is the flag type that wraps cli.DurationFlag to allow
|
|
||||||
// for other values to be specified
|
|
||||||
type DurationFlag struct {
|
|
||||||
cli.DurationFlag
|
|
||||||
set *flag.FlagSet
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDurationFlag creates a new DurationFlag
|
|
||||||
func NewDurationFlag(flag cli.DurationFlag) *DurationFlag {
|
|
||||||
return &DurationFlag{DurationFlag: flag, set: nil}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplyInputSourceValue applies a Duration value to the flagSet if required
|
// ApplyInputSourceValue applies a Duration value to the flagSet if required
|
||||||
func (f *DurationFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
func (f *DurationFlag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
||||||
if f.set != nil {
|
if f.set != nil {
|
||||||
@ -363,26 +215,6 @@ func (f *DurationFlag) ApplyInputSourceValue(context *cli.Context, isc InputSour
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply saves the flagSet for later usage then calls
|
|
||||||
// the wrapped DurationFlag.Apply
|
|
||||||
func (f *DurationFlag) Apply(set *flag.FlagSet) {
|
|
||||||
f.set = set
|
|
||||||
|
|
||||||
f.DurationFlag.Apply(set)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Float64Flag is the flag type that wraps cli.Float64Flag to allow
|
|
||||||
// for other values to be specified
|
|
||||||
type Float64Flag struct {
|
|
||||||
cli.Float64Flag
|
|
||||||
set *flag.FlagSet
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewFloat64Flag creates a new Float64Flag
|
|
||||||
func NewFloat64Flag(flag cli.Float64Flag) *Float64Flag {
|
|
||||||
return &Float64Flag{Float64Flag: flag, set: nil}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ApplyInputSourceValue applies a Float64 value to the flagSet if required
|
// ApplyInputSourceValue applies a Float64 value to the flagSet if required
|
||||||
func (f *Float64Flag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
func (f *Float64Flag) ApplyInputSourceValue(context *cli.Context, isc InputSourceContext) error {
|
||||||
if f.set != nil {
|
if f.set != nil {
|
||||||
@ -402,14 +234,6 @@ func (f *Float64Flag) ApplyInputSourceValue(context *cli.Context, isc InputSourc
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply saves the flagSet for later usage then calls
|
|
||||||
// the wrapped Float64Flag.Apply
|
|
||||||
func (f *Float64Flag) Apply(set *flag.FlagSet) {
|
|
||||||
f.set = set
|
|
||||||
|
|
||||||
f.Float64Flag.Apply(set)
|
|
||||||
}
|
|
||||||
|
|
||||||
func isEnvVarSet(envVars string) bool {
|
func isEnvVarSet(envVars string) bool {
|
||||||
for _, envVar := range strings.Split(envVars, ",") {
|
for _, envVar := range strings.Split(envVars, ",") {
|
||||||
envVar = strings.TrimSpace(envVar)
|
envVar = strings.TrimSpace(envVar)
|
||||||
|
256
altsrc/flag_generated.go
Normal file
256
altsrc/flag_generated.go
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
package altsrc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
|
||||||
|
"github.com/urfave/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
// WARNING: This file is generated!
|
||||||
|
|
||||||
|
// BoolFlag is the flag type that wraps cli.BoolFlag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type BoolFlag struct {
|
||||||
|
cli.BoolFlag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBoolFlag creates a new BoolFlag
|
||||||
|
func NewBoolFlag(fl cli.BoolFlag) *BoolFlag {
|
||||||
|
return &BoolFlag{BoolFlag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped BoolFlag.Apply
|
||||||
|
func (f *BoolFlag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.BoolFlag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BoolTFlag is the flag type that wraps cli.BoolTFlag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type BoolTFlag struct {
|
||||||
|
cli.BoolTFlag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBoolTFlag creates a new BoolTFlag
|
||||||
|
func NewBoolTFlag(fl cli.BoolTFlag) *BoolTFlag {
|
||||||
|
return &BoolTFlag{BoolTFlag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped BoolTFlag.Apply
|
||||||
|
func (f *BoolTFlag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.BoolTFlag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DurationFlag is the flag type that wraps cli.DurationFlag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type DurationFlag struct {
|
||||||
|
cli.DurationFlag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewDurationFlag creates a new DurationFlag
|
||||||
|
func NewDurationFlag(fl cli.DurationFlag) *DurationFlag {
|
||||||
|
return &DurationFlag{DurationFlag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped DurationFlag.Apply
|
||||||
|
func (f *DurationFlag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.DurationFlag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float64Flag is the flag type that wraps cli.Float64Flag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type Float64Flag struct {
|
||||||
|
cli.Float64Flag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewFloat64Flag creates a new Float64Flag
|
||||||
|
func NewFloat64Flag(fl cli.Float64Flag) *Float64Flag {
|
||||||
|
return &Float64Flag{Float64Flag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped Float64Flag.Apply
|
||||||
|
func (f *Float64Flag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.Float64Flag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenericFlag is the flag type that wraps cli.GenericFlag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type GenericFlag struct {
|
||||||
|
cli.GenericFlag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewGenericFlag creates a new GenericFlag
|
||||||
|
func NewGenericFlag(fl cli.GenericFlag) *GenericFlag {
|
||||||
|
return &GenericFlag{GenericFlag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped GenericFlag.Apply
|
||||||
|
func (f *GenericFlag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.GenericFlag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Int64Flag is the flag type that wraps cli.Int64Flag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type Int64Flag struct {
|
||||||
|
cli.Int64Flag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewInt64Flag creates a new Int64Flag
|
||||||
|
func NewInt64Flag(fl cli.Int64Flag) *Int64Flag {
|
||||||
|
return &Int64Flag{Int64Flag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped Int64Flag.Apply
|
||||||
|
func (f *Int64Flag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.Int64Flag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntFlag is the flag type that wraps cli.IntFlag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type IntFlag struct {
|
||||||
|
cli.IntFlag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewIntFlag creates a new IntFlag
|
||||||
|
func NewIntFlag(fl cli.IntFlag) *IntFlag {
|
||||||
|
return &IntFlag{IntFlag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped IntFlag.Apply
|
||||||
|
func (f *IntFlag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.IntFlag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntSliceFlag is the flag type that wraps cli.IntSliceFlag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type IntSliceFlag struct {
|
||||||
|
cli.IntSliceFlag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewIntSliceFlag creates a new IntSliceFlag
|
||||||
|
func NewIntSliceFlag(fl cli.IntSliceFlag) *IntSliceFlag {
|
||||||
|
return &IntSliceFlag{IntSliceFlag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped IntSliceFlag.Apply
|
||||||
|
func (f *IntSliceFlag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.IntSliceFlag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Int64SliceFlag is the flag type that wraps cli.Int64SliceFlag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type Int64SliceFlag struct {
|
||||||
|
cli.Int64SliceFlag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewInt64SliceFlag creates a new Int64SliceFlag
|
||||||
|
func NewInt64SliceFlag(fl cli.Int64SliceFlag) *Int64SliceFlag {
|
||||||
|
return &Int64SliceFlag{Int64SliceFlag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped Int64SliceFlag.Apply
|
||||||
|
func (f *Int64SliceFlag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.Int64SliceFlag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StringFlag is the flag type that wraps cli.StringFlag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type StringFlag struct {
|
||||||
|
cli.StringFlag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewStringFlag creates a new StringFlag
|
||||||
|
func NewStringFlag(fl cli.StringFlag) *StringFlag {
|
||||||
|
return &StringFlag{StringFlag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped StringFlag.Apply
|
||||||
|
func (f *StringFlag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.StringFlag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StringSliceFlag is the flag type that wraps cli.StringSliceFlag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type StringSliceFlag struct {
|
||||||
|
cli.StringSliceFlag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewStringSliceFlag creates a new StringSliceFlag
|
||||||
|
func NewStringSliceFlag(fl cli.StringSliceFlag) *StringSliceFlag {
|
||||||
|
return &StringSliceFlag{StringSliceFlag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped StringSliceFlag.Apply
|
||||||
|
func (f *StringSliceFlag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.StringSliceFlag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uint64Flag is the flag type that wraps cli.Uint64Flag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type Uint64Flag struct {
|
||||||
|
cli.Uint64Flag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUint64Flag creates a new Uint64Flag
|
||||||
|
func NewUint64Flag(fl cli.Uint64Flag) *Uint64Flag {
|
||||||
|
return &Uint64Flag{Uint64Flag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped Uint64Flag.Apply
|
||||||
|
func (f *Uint64Flag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.Uint64Flag.Apply(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UintFlag is the flag type that wraps cli.UintFlag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type UintFlag struct {
|
||||||
|
cli.UintFlag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUintFlag creates a new UintFlag
|
||||||
|
func NewUintFlag(fl cli.UintFlag) *UintFlag {
|
||||||
|
return &UintFlag{UintFlag: fl, set: nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped UintFlag.Apply
|
||||||
|
func (f *UintFlag) Apply(set *flag.FlagSet) {
|
||||||
|
f.set = set
|
||||||
|
f.UintFlag.Apply(set)
|
||||||
|
}
|
2
cli.go
2
cli.go
@ -18,4 +18,4 @@
|
|||||||
// }
|
// }
|
||||||
package cli
|
package cli
|
||||||
|
|
||||||
//go:generate python ./generate-flag-types -i flag-types.json -o flag_generated.go
|
//go:generate python ./generate-flag-types cli -i flag-types.json -o flag_generated.go
|
||||||
|
@ -13,9 +13,9 @@ An example of the minimum definition needed is:
|
|||||||
"context_default": "nil"
|
"context_default": "nil"
|
||||||
}
|
}
|
||||||
|
|
||||||
In this example, the generated code will include a type named `SomeTypeFlag`
|
In this example, the code generated for the `cli` package will include a type
|
||||||
that is expected to wrap a value of type `sometype`. Fetching values by name
|
named `SomeTypeFlag` that is expected to wrap a value of type `sometype`.
|
||||||
via `*cli.Context` will default to a value of `nil`.
|
Fetching values by name via `*cli.Context` will default to a value of `nil`.
|
||||||
|
|
||||||
A more complete, albeit somewhat redundant, example showing all available
|
A more complete, albeit somewhat redundant, example showing all available
|
||||||
definition keys is:
|
definition keys is:
|
||||||
@ -36,12 +36,14 @@ The meaning of each field is as follows:
|
|||||||
|
|
||||||
name (string) - The type "name", which will be suffixed with
|
name (string) - The type "name", which will be suffixed with
|
||||||
`Flag` when generating the type definition
|
`Flag` when generating the type definition
|
||||||
type (string) - The type that the generated `Flag` type is
|
for `cli` and the wrapper type for `altsrc`
|
||||||
expected to "contain" as its `.Value` member
|
type (string) - The type that the generated `Flag` type for `cli`
|
||||||
value (bool) - Should the generated type have a `Value` member?
|
is expected to "contain" as its `.Value` member
|
||||||
dest (bool) - Should the generated type support a destination
|
value (bool) - Should the generated `cli` type have a `Value`
|
||||||
pointer?
|
member?
|
||||||
doctail (string) - Additional docs for the flag type comment
|
dest (bool) - Should the generated `cli` type support a
|
||||||
|
destination pointer?
|
||||||
|
doctail (string) - Additional docs for the `cli` flag type comment
|
||||||
context_type (string) - The literal type used in the `*cli.Context`
|
context_type (string) - The literal type used in the `*cli.Context`
|
||||||
reader func signature
|
reader func signature
|
||||||
context_default (string) - The literal value used as the default by the
|
context_default (string) - The literal value used as the default by the
|
||||||
@ -74,6 +76,11 @@ def main(sysargs=sys.argv[:]):
|
|||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description='Generate flag type code!',
|
description='Generate flag type code!',
|
||||||
formatter_class=_FancyFormatter)
|
formatter_class=_FancyFormatter)
|
||||||
|
parser.add_argument(
|
||||||
|
'package',
|
||||||
|
type=str, default='cli', choices=['cli', 'altsrc'],
|
||||||
|
help='Package for which flag types will be generated'
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-i', '--in-json',
|
'-i', '--in-json',
|
||||||
type=argparse.FileType('r'),
|
type=argparse.FileType('r'),
|
||||||
@ -89,15 +96,15 @@ def main(sysargs=sys.argv[:]):
|
|||||||
parser.epilog = __doc__
|
parser.epilog = __doc__
|
||||||
|
|
||||||
args = parser.parse_args(sysargs[1:])
|
args = parser.parse_args(sysargs[1:])
|
||||||
_generate_flag_types(args.out_go, args.in_json)
|
_generate_flag_types(_WRITEFUNCS[args.package], args.out_go, args.in_json)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
def _generate_flag_types(output_go, input_json):
|
def _generate_flag_types(writefunc, output_go, input_json):
|
||||||
types = json.load(input_json)
|
types = json.load(input_json)
|
||||||
|
|
||||||
tmp = tempfile.NamedTemporaryFile(suffix='.go', delete=False)
|
tmp = tempfile.NamedTemporaryFile(suffix='.go', delete=False)
|
||||||
_write_flag_types(tmp, types)
|
writefunc(tmp, types)
|
||||||
tmp.close()
|
tmp.close()
|
||||||
|
|
||||||
new_content = subprocess.check_output(
|
new_content = subprocess.check_output(
|
||||||
@ -109,7 +116,16 @@ def _generate_flag_types(output_go, input_json):
|
|||||||
os.remove(tmp.name)
|
os.remove(tmp.name)
|
||||||
|
|
||||||
|
|
||||||
def _write_flag_types(outfile, types):
|
def _set_typedef_defaults(typedef):
|
||||||
|
typedef.setdefault('doctail', '')
|
||||||
|
typedef.setdefault('context_type', typedef['type'])
|
||||||
|
typedef.setdefault('dest', True)
|
||||||
|
typedef.setdefault('value', True)
|
||||||
|
typedef.setdefault('parser', 'f.Value, error(nil)')
|
||||||
|
typedef.setdefault('parser_cast', 'parsed')
|
||||||
|
|
||||||
|
|
||||||
|
def _write_cli_flag_types(outfile, types):
|
||||||
_fwrite(outfile, """\
|
_fwrite(outfile, """\
|
||||||
package cli
|
package cli
|
||||||
|
|
||||||
@ -118,13 +134,7 @@ def _write_flag_types(outfile, types):
|
|||||||
""")
|
""")
|
||||||
|
|
||||||
for typedef in types:
|
for typedef in types:
|
||||||
typedef.setdefault('doctail', '')
|
_set_typedef_defaults(typedef)
|
||||||
typedef.setdefault('context_type', typedef['type'])
|
|
||||||
typedef.setdefault('dest', True)
|
|
||||||
typedef.setdefault('value', True)
|
|
||||||
typedef.setdefault('parser', 'f.Value, error(nil)')
|
|
||||||
typedef.setdefault('parser_cast', 'parsed')
|
|
||||||
|
|
||||||
|
|
||||||
_fwrite(outfile, """\
|
_fwrite(outfile, """\
|
||||||
// {name}Flag is a flag with type {type}{doctail}
|
// {name}Flag is a flag with type {type}{doctail}
|
||||||
@ -188,9 +198,47 @@ def _write_flag_types(outfile, types):
|
|||||||
""".format(**typedef))
|
""".format(**typedef))
|
||||||
|
|
||||||
|
|
||||||
|
def _write_altsrc_flag_types(outfile, types):
|
||||||
|
_fwrite(outfile, """\
|
||||||
|
package altsrc
|
||||||
|
|
||||||
|
// WARNING: This file is generated!
|
||||||
|
|
||||||
|
""")
|
||||||
|
|
||||||
|
for typedef in types:
|
||||||
|
_set_typedef_defaults(typedef)
|
||||||
|
|
||||||
|
_fwrite(outfile, """\
|
||||||
|
// {name}Flag is the flag type that wraps cli.{name}Flag to allow
|
||||||
|
// for other values to be specified
|
||||||
|
type {name}Flag struct {{
|
||||||
|
cli.{name}Flag
|
||||||
|
set *flag.FlagSet
|
||||||
|
}}
|
||||||
|
|
||||||
|
// New{name}Flag creates a new {name}Flag
|
||||||
|
func New{name}Flag(fl cli.{name}Flag) *{name}Flag {{
|
||||||
|
return &{name}Flag{{{name}Flag: fl, set: nil}}
|
||||||
|
}}
|
||||||
|
|
||||||
|
// Apply saves the flagSet for later usage calls, then calls the
|
||||||
|
// wrapped {name}Flag.Apply
|
||||||
|
func (f *{name}Flag) Apply(set *flag.FlagSet) {{
|
||||||
|
f.set = set
|
||||||
|
f.{name}Flag.Apply(set)
|
||||||
|
}}
|
||||||
|
""".format(**typedef))
|
||||||
|
|
||||||
|
|
||||||
def _fwrite(outfile, text):
|
def _fwrite(outfile, text):
|
||||||
print(textwrap.dedent(text), end='', file=outfile)
|
print(textwrap.dedent(text), end='', file=outfile)
|
||||||
|
|
||||||
|
|
||||||
|
_WRITEFUNCS = {
|
||||||
|
'cli': _write_cli_flag_types,
|
||||||
|
'altsrc': _write_altsrc_flag_types
|
||||||
|
}
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
sys.exit(main())
|
sys.exit(main())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user