mukan-ignite/ignite/services/plugin/grpc/v1/interface_flag.go
Mukan Erkin Törük 26b204bd04
Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
feat: fork Ignite CLI v29 as Mukan Ignite — remove cosmos-sdk restrictions
2026-05-11 03:31:37 +03:00

169 lines
4.5 KiB
Go

package v1
import (
"strconv"
"strings"
"github.com/spf13/pflag"
"github.com/ignite/cli/v29/ignite/pkg/errors"
)
const (
cobraFlagTypeBool = "bool"
cobraFlagTypeInt = "int"
cobraFlagTypeInt64 = "int64"
cobraFlagTypeString = "string"
cobraFlagTypeStringSlice = "stringSlice"
cobraFlagTypeUint = "uint"
cobraFlagTypeUint64 = "uint64"
)
var flagTypes = map[string]Flag_Type{
cobraFlagTypeBool: Flag_TYPE_FLAG_BOOL,
cobraFlagTypeInt: Flag_TYPE_FLAG_INT,
cobraFlagTypeInt64: Flag_TYPE_FLAG_INT64,
cobraFlagTypeString: Flag_TYPE_FLAG_STRING_UNSPECIFIED,
cobraFlagTypeStringSlice: Flag_TYPE_FLAG_STRING_SLICE,
cobraFlagTypeUint: Flag_TYPE_FLAG_UINT,
cobraFlagTypeUint64: Flag_TYPE_FLAG_UINT64,
}
func newDefaultFlagValueError(typeName, value string) error {
return errors.Errorf("invalid default value for plugin command %s flag: %s", typeName, value)
}
func (f *Flag) ExportToFlagSet(fs *pflag.FlagSet) error {
switch f.Type { //nolint:exhaustive
case Flag_TYPE_FLAG_BOOL,
Flag_TYPE_FLAG_INT,
Flag_TYPE_FLAG_INT64,
Flag_TYPE_FLAG_UINT,
Flag_TYPE_FLAG_UINT64:
if f.DefaultValue == "" {
f.DefaultValue = "0"
}
}
switch f.Type {
case Flag_TYPE_FLAG_BOOL:
v, err := strconv.ParseBool(f.DefaultValue)
if err != nil {
return newDefaultFlagValueError(cobraFlagTypeBool, f.DefaultValue)
}
fs.BoolP(f.Name, f.Shorthand, v, f.Usage)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeBool, f.Value)
}
}
case Flag_TYPE_FLAG_INT:
v, err := strconv.Atoi(f.DefaultValue)
if err != nil {
return newDefaultFlagValueError(cobraFlagTypeInt, f.DefaultValue)
}
fs.IntP(f.Name, f.Shorthand, v, f.Usage)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeInt, f.Value)
}
}
case Flag_TYPE_FLAG_UINT:
v, err := strconv.ParseUint(f.DefaultValue, 10, 64)
if err != nil {
return newDefaultFlagValueError(cobraFlagTypeUint, f.DefaultValue)
}
fs.UintP(f.Name, f.Shorthand, uint(v), f.Usage)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeUint, f.Value)
}
}
case Flag_TYPE_FLAG_INT64:
v, err := strconv.ParseInt(f.DefaultValue, 10, 64)
if err != nil {
return newDefaultFlagValueError(cobraFlagTypeInt64, f.DefaultValue)
}
fs.Int64P(f.Name, f.Shorthand, v, f.Usage)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeInt64, f.Value)
}
}
case Flag_TYPE_FLAG_UINT64:
v, err := strconv.ParseUint(f.DefaultValue, 10, 64)
if err != nil {
return newDefaultFlagValueError(cobraFlagTypeUint64, f.DefaultValue)
}
fs.Uint64P(f.Name, f.Shorthand, v, f.Usage)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeUint64, f.Value)
}
}
case Flag_TYPE_FLAG_STRING_SLICE:
s := strings.Trim(f.DefaultValue, "[]")
fs.StringSliceP(f.Name, f.Shorthand, strings.Fields(s), f.Usage)
if f.Value != "" {
if err := fs.Set(f.Name, strings.Trim(f.Value, "[]")); err != nil {
return newDefaultFlagValueError(cobraFlagTypeStringSlice, f.Value)
}
}
case Flag_TYPE_FLAG_STRING_UNSPECIFIED:
fs.StringP(f.Name, f.Shorthand, f.DefaultValue, f.Usage)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeString, f.Value)
}
}
}
return nil
}
type flagger interface {
Flags() *pflag.FlagSet
PersistentFlags() *pflag.FlagSet
}
func extractCobraFlags(cmd flagger) []*Flag {
var flags []*Flag
if cmd.Flags() != nil {
cmd.Flags().VisitAll(func(pf *pflag.Flag) {
// Skip persistent flags
if cmd.PersistentFlags().Lookup(pf.Name) != nil {
return
}
flags = append(flags, &Flag{
Name: pf.Name,
Shorthand: pf.Shorthand,
Usage: pf.Usage,
DefaultValue: pf.DefValue,
Value: pf.Value.String(),
Type: flagTypes[pf.Value.Type()],
})
})
}
if cmd.PersistentFlags() != nil {
cmd.PersistentFlags().VisitAll(func(pf *pflag.Flag) {
flags = append(flags, &Flag{
Name: pf.Name,
Shorthand: pf.Shorthand,
Usage: pf.Usage,
DefaultValue: pf.DefValue,
Value: pf.Value.String(),
Type: flagTypes[pf.Value.Type()],
Persistent: true,
})
})
}
return flags
}