helmfile/pkg/flags/registry.go

65 lines
1.9 KiB
Go

package flags
import "github.com/spf13/cobra"
// FlagRegistry defines an interface for registering and transferring flags
type FlagRegistry interface {
RegisterFlags(cmd *cobra.Command)
TransferFlags(cmd *cobra.Command, opts interface{})
GetRegisteredFlagNames() []string
GetValues() map[string]interface{}
IsFlagRegistered(name string) bool
}
// GenericFlagRegistry is a base struct for flag registries
type GenericFlagRegistry struct {
// Map of flag names to their values
values map[string]interface{}
}
// NewGenericFlagRegistry creates a new GenericFlagRegistrar
func NewGenericFlagRegistry() *GenericFlagRegistry {
return &GenericFlagRegistry{
values: make(map[string]interface{}),
}
}
// GetValues returns the internal values map
func (r *GenericFlagRegistry) GetValues() map[string]interface{} {
return r.values
}
// GetRegisteredFlagNames returns the names of all registered flags
func (r *GenericFlagRegistry) GetRegisteredFlagNames() []string {
names := make([]string, 0, len(r.values))
for name := range r.values {
names = append(names, name)
}
return names
}
// IsFlagRegistered checks if a flag is registered in the registry
func (r *GenericFlagRegistry) IsFlagRegistered(name string) bool {
_, exists := r.values[name]
return exists
}
// TransferFlags transfers all registered flags to the options
func (r *GenericFlagRegistry) TransferFlags(cmd *cobra.Command, opts interface{}) {
if handler, ok := opts.(FlagHandler); ok {
flags := cmd.Flags()
// Transfer each registered flag
for name, value := range r.values {
changed := flags.Changed(name)
handler.HandleFlag(name, value, changed)
}
}
}
// RegisterBoolFlag registers a boolean flag and stores its reference
func (r *GenericFlagRegistry) RegisterBoolFlag(cmd *cobra.Command, name string, value *bool, defaultValue bool, usage string) {
cmd.Flags().BoolVar(value, name, defaultValue, usage)
r.values[name] = value
}