Enhance GetNativeValue

This commit is contained in:
cutelisp
2025-06-29 09:36:56 +01:00
committed by Dmytro Maluka
parent 55a553041b
commit 3a7705a090
4 changed files with 17 additions and 15 deletions

View File

@@ -317,7 +317,7 @@ func main() {
// flag options
for k, v := range optionFlags {
if *v != "" {
nativeValue, err := config.GetNativeValue(k, config.DefaultAllSettings()[k], *v)
nativeValue, err := config.GetNativeValue(k, *v)
if err != nil {
screen.TermMessage(err)
continue

View File

@@ -668,7 +668,7 @@ func SetGlobalOption(option, value string) error {
return config.ErrInvalidOption
}
nativeValue, err := config.GetNativeValue(option, config.GlobalSettings[option], value)
nativeValue, err := config.GetNativeValue(option, value)
if err != nil {
return err
}

View File

@@ -155,7 +155,7 @@ func (b *Buffer) SetOption(option, value string) error {
return config.ErrInvalidOption
}
nativeValue, err := config.GetNativeValue(option, b.Settings[option], value)
nativeValue, err := config.GetNativeValue(option, value)
if err != nil {
return err
}

View File

@@ -472,28 +472,30 @@ func DefaultAllSettings() map[string]interface{} {
}
// GetNativeValue parses and validates a value for a given option
func GetNativeValue(option string, realValue interface{}, value string) (interface{}, error) {
var native interface{}
kind := reflect.TypeOf(realValue).Kind()
if kind == reflect.Bool {
func GetNativeValue(option, value string) (interface{}, error) {
curVal := GetGlobalOption(option)
if curVal == nil {
return nil, ErrInvalidOption
}
switch kind := reflect.TypeOf(curVal).Kind(); kind {
case reflect.Bool:
b, err := util.ParseBool(value)
if err != nil {
return nil, ErrInvalidValue
}
native = b
} else if kind == reflect.String {
native = value
} else if kind == reflect.Float64 {
return b, nil
case reflect.String:
return value, nil
case reflect.Float64:
f, err := strconv.ParseFloat(value, 64)
if err != nil {
return nil, ErrInvalidValue
}
native = f
} else {
return f, nil
default:
return nil, ErrInvalidValue
}
return native, nil
}
// OptionIsValid checks if a value is valid for a certain option