Skip to content

Commit 95a1d41

Browse files
Use easyjson.Marshaler, json.Marshaler or json.Marshal
In order to allow for faster JSON marshalling use `internal.MarshalJSON` which will pick the best possible json marshalling action.
1 parent cfafd75 commit 95a1d41

File tree

6 files changed

+37
-13
lines changed

6 files changed

+37
-13
lines changed

metadata/metadata_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"unicode"
1111

1212
"github.com/hellofresh/goengine/metadata"
13+
"github.com/mailru/easyjson"
1314
"github.com/stretchr/testify/assert"
1415
)
1516

@@ -253,7 +254,7 @@ func BenchmarkMarshalJSON(b *testing.B) {
253254

254255
b.ResetTimer()
255256
for i := 0; i < b.N; i++ {
256-
_, err := json.Marshal(m)
257+
_, err := easyjson.Marshal(m.(easyjson.Marshaler))
257258
if err != nil {
258259
b.Fail()
259260
}

strategy/json/internal/json.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package internal
2+
3+
import (
4+
"encoding/json"
5+
6+
"github.com/mailru/easyjson"
7+
"github.com/mailru/easyjson/jwriter"
8+
)
9+
10+
// MarshalJSON returns the JSON encoding of v.
11+
// This is done using `easyjson.Marshaler`, `json.Marshaler` or `json.Marshal`
12+
func MarshalJSON(v interface{}) ([]byte, error) {
13+
if vm, ok := v.(easyjson.Marshaler); ok {
14+
w := &jwriter.Writer{}
15+
vm.MarshalEasyJSON(w)
16+
return w.Buffer.BuildBytes(), w.Error
17+
}
18+
19+
if vm, ok := v.(json.Marshaler); ok {
20+
return vm.MarshalJSON()
21+
}
22+
23+
return json.Marshal(v)
24+
}

strategy/json/payload_transformer.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
"github.com/hellofresh/goengine"
1010
reflectUtil "github.com/hellofresh/goengine/internal/reflect"
11+
"github.com/hellofresh/goengine/strategy/json/internal"
1112
)
1213

1314
var (
@@ -66,7 +67,7 @@ func (p *PayloadTransformer) ConvertPayload(payload interface{}) (string, []byte
6667
return "", nil, err
6768
}
6869

69-
data, err := json.Marshal(payload)
70+
data, err := internal.MarshalJSON(payload)
7071
if err != nil {
7172
return "", nil, ErrPayloadCannotBeSerialized
7273
}

strategy/json/sql/message_factory_aggregate_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,17 @@
33
package sql_test
44

55
import (
6-
"encoding/json"
76
"errors"
87
"testing"
98
"time"
109

11-
"github.com/golang/mock/gomock"
12-
1310
sqlmock "github.com/DATA-DOG/go-sqlmock"
11+
"github.com/golang/mock/gomock"
1412
"github.com/hellofresh/goengine"
1513
"github.com/hellofresh/goengine/aggregate"
1614
"github.com/hellofresh/goengine/metadata"
1715
"github.com/hellofresh/goengine/mocks"
16+
"github.com/hellofresh/goengine/strategy/json/internal"
1817
"github.com/hellofresh/goengine/strategy/json/sql"
1918
"github.com/stretchr/testify/assert"
2019
"github.com/stretchr/testify/require"
@@ -70,10 +69,10 @@ func TestAggregateChangedFactory_CreateFromRows(t *testing.T) {
7069
payloadFactory := mocks.NewMessagePayloadFactory(ctrl)
7170
mockRows := sqlmock.NewRows(rowColumns)
7271
for i, msg := range expectedMessages {
73-
rowPayload, err := json.Marshal(msg.Payload())
72+
rowPayload, err := internal.MarshalJSON(msg.Payload())
7473
require.NoError(t, err)
7574

76-
rowMetadata, err := json.Marshal(msg.Metadata())
75+
rowMetadata, err := internal.MarshalJSON(msg.Metadata())
7776
require.NoError(t, err)
7877

7978
msgNr := i + 1

strategy/json/sql/postgres/single_stream_strategy.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package postgres
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"regexp"
76
"strings"
87

9-
"github.com/hellofresh/goengine/driver/sql/postgres"
10-
118
"github.com/hellofresh/goengine"
129
"github.com/hellofresh/goengine/driver/sql"
10+
"github.com/hellofresh/goengine/driver/sql/postgres"
11+
"github.com/hellofresh/goengine/strategy/json/internal"
1312
)
1413

1514
var (
@@ -81,7 +80,7 @@ func (s *SingleStreamStrategy) PrepareData(messages []goengine.Message) ([]inter
8180
return nil, err
8281
}
8382

84-
meta, err := json.Marshal(msg.Metadata())
83+
meta, err := internal.MarshalJSON(msg.Metadata())
8584
if err != nil {
8685
return nil, err
8786
}

strategy/json/sql/postgres/single_stream_strategy_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
package postgres_test
44

55
import (
6-
"encoding/json"
76
"errors"
87
"fmt"
98
"testing"
@@ -13,6 +12,7 @@ import (
1312
"github.com/hellofresh/goengine"
1413
"github.com/hellofresh/goengine/metadata"
1514
"github.com/hellofresh/goengine/mocks"
15+
"github.com/hellofresh/goengine/strategy/json/internal"
1616
"github.com/hellofresh/goengine/strategy/json/sql/postgres"
1717
"github.com/stretchr/testify/assert"
1818
"github.com/stretchr/testify/require"
@@ -181,7 +181,7 @@ func TestPrepareData(t *testing.T) {
181181

182182
pc.EXPECT().ConvertPayload(payload).Return(payloadType, payload, nil).AnyTimes()
183183

184-
metaJSON, err := json.Marshal(meta)
184+
metaJSON, err := internal.MarshalJSON(meta)
185185
require.NoError(t, err)
186186

187187
expectedColumns = append(

0 commit comments

Comments
 (0)