diff --git a/tools/parse.go b/tools/parse.go index d82517b..fdeefd3 100644 --- a/tools/parse.go +++ b/tools/parse.go @@ -18,7 +18,7 @@ func ParseString(in string) any { } if strings.HasPrefix(s, "!") { - return strings.TrimPrefix(s, "!") + return s } yesno := regexp.MustCompile("^(y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)$") diff --git a/tools/parse_test.go b/tools/parse_test.go index 9ff0e2e..72fc50d 100644 --- a/tools/parse_test.go +++ b/tools/parse_test.go @@ -38,10 +38,10 @@ func TestParse(t *testing.T) { {"on-value", "on", true}, {"no-value", "no", false}, {"off-value", "off", false}, - {"skip-parsing-num", "!42", "42"}, - {"skip-parsing-bool", "!false", "false"}, - {"skip-parsing-time", "!" + when.Format(time.RFC3339), when.Format(time.RFC3339)}, - {"skip-parsing-duration", "!15 mins", "15 mins"}, + {"skip-parsing-num", "!42", "!42"}, + {"skip-parsing-bool", "!false", "!false"}, + {"skip-parsing-time", "!" + when.Format(time.RFC3339), "!" + when.Format(time.RFC3339)}, + {"skip-parsing-duration", "!15 mins", "!15 mins"}, } for _, tt := range tests { diff --git a/tools/write_buffer.go b/tools/write_buffer.go index 8ae9386..b9626bc 100644 --- a/tools/write_buffer.go +++ b/tools/write_buffer.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "strconv" + "strings" "time" ) @@ -27,6 +28,9 @@ func WriteValue(buff *bytes.Buffer, val any) (n int, err error) { return buff.Write(o) } case string: + if strings.HasPrefix(v, "!") { + return buff.WriteString(strings.TrimPrefix(v, "!")) + } return buff.WriteString(v) case int: return buff.WriteString(strconv.Itoa(v)) @@ -39,6 +43,9 @@ func WriteValue(buff *bytes.Buffer, val any) (n int, err error) { case json.RawMessage: return buff.Write(v) case []byte: + if v[0] == '!' { + return buff.Write(v[1:]) + } return buff.Write(v) case byte: err = buff.WriteByte(v) diff --git a/tools/write_buffer_test.go b/tools/write_buffer_test.go index aa7e203..8d3ab1f 100644 --- a/tools/write_buffer_test.go +++ b/tools/write_buffer_test.go @@ -33,6 +33,14 @@ func TestWriteBuffer(t *testing.T) { {"slice", []any{1, 2, "foo"}, `[1,2,"foo"]`, nil}, {"map", map[string]any{"baz": 42, "foo": "bar"}, `{"baz":42,"foo":"bar"}`, nil}, {"struct", struct{}{}, "", errors.New("Unsupported type struct {}")}, + {"skip-bang-num", "!42", "42", nil}, + {"skip-bang-bool", "!false", "false", nil}, + {"skip-bang-time", "!" + when.Format(time.RFC3339), when.Format(time.RFC3339), nil}, + {"skip-bang-duration", "!15 mins", "15 mins", nil}, + {"skip-bang-bytes-num", []byte("!42"), "42", nil}, + {"skip-bang-bytes-bool", []byte("!false"), "false", nil}, + {"skip-bang-bytes-time", []byte("!" + when.Format(time.RFC3339)), when.Format(time.RFC3339), nil}, + {"skip-bang-bytes-duration", []byte("!15 mins"), "15 mins", nil}, } for _, tt := range tests {