internal/langserver/handlers/command/cmd_args.go (74 lines of code) (raw):

package command import ( "encoding/json" "strconv" "strings" ) type CommandArgs map[string]interface{} func (c CommandArgs) GetString(variable string) (string, bool) { vRaw, ok := c[strings.ToLower(variable)] if !ok { return "", false } v, ok := vRaw.(string) if !ok { return "", false } return v, true } func (c CommandArgs) GetNumber(variable string) (float64, bool) { vRaw, ok := c[strings.ToLower(variable)] if !ok { return 0, false } v, ok := vRaw.(float64) if !ok { return 0, false } return v, true } func (c CommandArgs) GetBool(variable string) (bool, bool) { vRaw, ok := c[strings.ToLower(variable)] if !ok { return false, false } v, ok := vRaw.(bool) if !ok { return false, false } return v, true } func ParseCommandArgs(arguments []json.RawMessage) CommandArgs { args := make(map[string]interface{}) if arguments == nil { return args } for _, rawArg := range arguments { var arg string err := json.Unmarshal(rawArg, &arg) if err != nil { // TODO: Log error continue } if arg == "" { continue } pair := strings.SplitN(arg, "=", 2) if len(pair) != 2 { continue } variable := strings.ToLower(pair[0]) value := pair[1] if value == "" { args[variable] = value continue } if f, err := strconv.ParseFloat(value, 64); err == nil { args[variable] = f } else if b, err := strconv.ParseBool(value); err == nil { args[variable] = b } else { args[variable] = value } } return args }