diff --git a/pkg/jq/jq.go b/pkg/jq/jq.go index 2881c4c..1e67a43 100644 --- a/pkg/jq/jq.go +++ b/pkg/jq/jq.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "github.com/gopaytech/go-commons/pkg/strings" + "log" "github.com/itchyny/gojq" ) @@ -24,10 +25,15 @@ type JsonQuery interface { ExecuteToString(ctx context.Context) (output string, err error) } -func ExecuteToString(ctx context.Context, inputJsonBytes []byte, query string, queryType QueryType) (output string, err error) { +func ExecuteToString(ctx context.Context, inputBytes []byte, query string, queryType QueryType) (output string, err error) { builder := strings.NewBuilder() - err = Execute(ctx, inputJsonBytes, query, queryType, func(value interface{}) (cont bool) { - builder.Write("%v", value) + err = Execute(ctx, inputBytes, query, queryType, func(value interface{}) (cont bool) { + jsonByte, err := json.Marshal(value) + if err != nil { + log.Panicln(err) + return false + } + builder.WriteBytes(jsonByte) return true }) diff --git a/pkg/strings/builder.go b/pkg/strings/builder.go index 0b80eab..a78d4af 100644 --- a/pkg/strings/builder.go +++ b/pkg/strings/builder.go @@ -6,21 +6,38 @@ import ( ) type Builder interface { - Write(format string, args ...interface{}) - Writeln(format string, args ...interface{}) + Write(value string) + Writeln(value string) + WriteBytes(bytes []byte) + WriteF(format string, args ...interface{}) + WriteFln(format string, args ...interface{}) ToString() (out string) ToStringReset() (out string) + Reset() } type builder struct { stringBuilder *strings.Builder } -func (builder builder) Write(format string, args ...interface{}) { +func (builder builder) WriteBytes(bytes []byte) { + builder.stringBuilder.Write(bytes) +} + +func (builder builder) Write(value string) { + builder.stringBuilder.WriteString(value) +} + +func (builder builder) Writeln(value string) { + builder.stringBuilder.WriteString(value) + builder.stringBuilder.WriteString("\n") +} + +func (builder builder) WriteF(format string, args ...interface{}) { builder.stringBuilder.WriteString(fmt.Sprintf(format, args...)) } -func (builder builder) Writeln(format string, args ...interface{}) { +func (builder builder) WriteFln(format string, args ...interface{}) { builder.stringBuilder.WriteString(fmt.Sprintf(format, args...)) builder.stringBuilder.WriteString("\n") } @@ -35,6 +52,10 @@ func (builder builder) ToStringReset() (out string) { return } +func (builder builder) Reset() { + builder.stringBuilder.Reset() +} + func NewBuilder() Builder { return &builder{stringBuilder: &strings.Builder{}} }