commit 6614f5b29388bba644bfdbc36cc3d62b42459d09
parent 2ea8249bc7c5508fdb46558ec378d5fa1c84db45
Author: Francois Parquet <francois.parquet@gmail.com>
Date: Mon, 7 May 2018 21:22:24 +0800
Merge pull request #23 from francoispqt/update/add-int64-funcs
Add int64 funcs for array encoding
Diffstat:
2 files changed, 75 insertions(+), 5 deletions(-)
diff --git a/encode_number.go b/encode_number.go
@@ -101,6 +101,30 @@ func (enc *Encoder) AddIntOmitEmpty(v int) {
enc.buf = strconv.AppendInt(enc.buf, int64(v), 10)
}
+// AddInt64 adds an int to be encoded, must be used inside a slice or array encoding (does not encode a key)
+func (enc *Encoder) AddInt64(v int64) {
+ enc.grow(10)
+ r := enc.getPreviousRune()
+ if r != '[' {
+ enc.writeByte(',')
+ }
+ enc.buf = strconv.AppendInt(enc.buf, v, 10)
+}
+
+// AddIntOmitEmpty adds an int to be encoded and skips it if its value is 0,
+// must be used inside a slice or array encoding (does not encode a key).
+func (enc *Encoder) AddInt64OmitEmpty(v int64) {
+ if v == 0 {
+ return
+ }
+ enc.grow(10)
+ r := enc.getPreviousRune()
+ if r != '[' {
+ enc.writeByte(',')
+ }
+ enc.buf = strconv.AppendInt(enc.buf, v, 10)
+}
+
// AddFloat adds a float64 to be encoded, must be used inside a slice or array encoding (does not encode a key)
func (enc *Encoder) AddFloat(v float64) {
enc.grow(10)
diff --git a/encode_number_test.go b/encode_number_test.go
@@ -229,7 +229,7 @@ func TestEncoderNumberMarshalAPI(t *testing.T) {
}
func TestAddNumberFunc(t *testing.T) {
- t.Run("int64", func(t *testing.T) {
+ t.Run("int64-key", func(t *testing.T) {
builder := &strings.Builder{}
enc := BorrowEncoder(builder)
enc.writeByte('{')
@@ -238,7 +238,7 @@ func TestAddNumberFunc(t *testing.T) {
assert.Nil(t, err, "err should be nil")
assert.Equal(t, `{"test":10`, builder.String(), `builder.String() should be equal to {"test":10"`)
})
- t.Run("int64-2", func(t *testing.T) {
+ t.Run("int64-key-2", func(t *testing.T) {
builder := &strings.Builder{}
enc := BorrowEncoder(builder)
enc.writeBytes([]byte(`{"test":1`))
@@ -248,7 +248,7 @@ func TestAddNumberFunc(t *testing.T) {
assert.Equal(t, `{"test":1,"test":10`, builder.String(), `builder.String() should be equal to {"test":10"`)
})
- t.Run("int64-omit-empty", func(t *testing.T) {
+ t.Run("int64-key-omit-empty", func(t *testing.T) {
builder := &strings.Builder{}
enc := BorrowEncoder(builder)
enc.writeByte('{')
@@ -257,7 +257,7 @@ func TestAddNumberFunc(t *testing.T) {
assert.Nil(t, err, "err should be nil")
assert.Equal(t, `{"test":10`, builder.String(), `builder.String() should be equal to {"test":10"`)
})
- t.Run("int64-omit-empty-2", func(t *testing.T) {
+ t.Run("int64-key-omit-empty-2", func(t *testing.T) {
builder := &strings.Builder{}
enc := BorrowEncoder(builder)
enc.writeBytes([]byte(`{"test":1`))
@@ -266,7 +266,7 @@ func TestAddNumberFunc(t *testing.T) {
assert.Nil(t, err, "err should be nil")
assert.Equal(t, `{"test":1,"test":10`, builder.String(), `builder.String() should be equal to {"test":10"`)
})
- t.Run("int64-omit-empty-3", func(t *testing.T) {
+ t.Run("int64-key-omit-empty-3", func(t *testing.T) {
builder := &strings.Builder{}
enc := BorrowEncoder(builder)
enc.writeByte('{')
@@ -275,4 +275,50 @@ func TestAddNumberFunc(t *testing.T) {
assert.Nil(t, err, "err should be nil")
assert.Equal(t, `{`, builder.String(), `builder.String() should be equal to {"test":10"`)
})
+ t.Run("int64", func(t *testing.T) {
+ builder := &strings.Builder{}
+ enc := BorrowEncoder(builder)
+ enc.writeByte('[')
+ enc.AddInt64(10)
+ _, err := enc.Write()
+ assert.Nil(t, err, "err should be nil")
+ assert.Equal(t, `[10`, builder.String(), `builder.String() should be equal to {"test":10"`)
+ })
+ t.Run("int64-2", func(t *testing.T) {
+ builder := &strings.Builder{}
+ enc := BorrowEncoder(builder)
+ enc.writeBytes([]byte(`[1`))
+ enc.AddInt64(10)
+ _, err := enc.Write()
+ assert.Nil(t, err, "err should be nil")
+ assert.Equal(t, `[1,10`, builder.String(), `builder.String() should be equal to {"test":10"`)
+ })
+
+ t.Run("int64-omit-empty", func(t *testing.T) {
+ builder := &strings.Builder{}
+ enc := BorrowEncoder(builder)
+ enc.writeByte('[')
+ enc.AddInt64OmitEmpty(10)
+ _, err := enc.Write()
+ assert.Nil(t, err, "err should be nil")
+ assert.Equal(t, `[10`, builder.String(), `builder.String() should be equal to {"test":10"`)
+ })
+ t.Run("int64-omit-empty-2", func(t *testing.T) {
+ builder := &strings.Builder{}
+ enc := BorrowEncoder(builder)
+ enc.writeBytes([]byte(`[1`))
+ enc.AddInt64OmitEmpty(10)
+ _, err := enc.Write()
+ assert.Nil(t, err, "err should be nil")
+ assert.Equal(t, `[1,10`, builder.String(), `builder.String() should be equal to {"test":10"`)
+ })
+ t.Run("int64-omit-empty-3", func(t *testing.T) {
+ builder := &strings.Builder{}
+ enc := BorrowEncoder(builder)
+ enc.writeByte('[')
+ enc.AddInt64OmitEmpty(0)
+ _, err := enc.Write()
+ assert.Nil(t, err, "err should be nil")
+ assert.Equal(t, `[`, builder.String(), `builder.String() should be equal to {"test":10"`)
+ })
}