From b7795112450253a66b08528f73bac03120de9dfb Mon Sep 17 00:00:00 2001 From: debugtalk Date: Sun, 3 Oct 2021 23:49:04 +0800 Subject: [PATCH] feat: convertString --- parser.go | 29 +++++++++++++++++------------ parser_test.go | 21 +++++++++++++++++++++ 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/parser.go b/parser.go index 71bb243e..6ebe6ed7 100644 --- a/parser.go +++ b/parser.go @@ -39,15 +39,21 @@ func parseHeaders(rawHeaders map[string]string, variablesMapping map[string]inte parsedHeaders := make(map[string]string) headers := parseData(rawHeaders, variablesMapping).(map[string]interface{}) for k, v := range headers { - if value, ok := v.(string); ok { - parsedHeaders[k] = value - } else { - parsedHeaders[k] = fmt.Sprintf("%v", v) - } + parsedHeaders[k] = convertString(v) } return parsedHeaders } +func convertString(raw interface{}) string { + if value, ok := raw.(string); ok { + return value + } else { + // raw is not string, e.g. int, float, etc. + // convert to string + return fmt.Sprintf("%v", raw) + } +} + func parseData(raw interface{}, variablesMapping map[string]interface{}) interface{} { rawValue := reflect.ValueOf(raw) switch rawValue.Kind() { @@ -68,13 +74,8 @@ func parseData(raw interface{}, variablesMapping map[string]interface{}) interfa v := rawValue.MapIndex(k) parsedValue := parseData(v.Interface(), variablesMapping) - if key, ok := parsedKey.(string); ok { - parsedMap[key] = parsedValue - } else { - // parsed key is not string, e.g. int, float, etc. - // convert to string - parsedMap[fmt.Sprintf("%v", parsedKey)] = parsedValue - } + key := convertString(parsedKey) + parsedMap[key] = parsedValue } return parsedMap default: @@ -313,3 +314,7 @@ func parseFunctionArguments(argsStr string) ([]interface{}, error) { return arguments, nil } + +func parseVariables(variables map[string]interface{}) (map[string]interface{}, error) { + return variables, nil +} diff --git a/parser_test.go b/parser_test.go index 6793c9a0..a0d3345c 100644 --- a/parser_test.go +++ b/parser_test.go @@ -407,3 +407,24 @@ func TestParseDataStringWithFunctions(t *testing.T) { t.Fail() } } + +func TestConvertString(t *testing.T) { + testData := []struct { + raw interface{} + expect interface{} + }{ + {"", ""}, + {"abc", "abc"}, + {"123", "123"}, + {123, "123"}, + {1.23, "1.23"}, + {nil, ""}, + } + + for _, data := range testData { + value := convertString(data.raw) + if !assert.Equal(t, data.expect, value) { + t.Fail() + } + } +}