Skip to content

Commit 86e4b63

Browse files
committed
update BorrowDecoder api
1 parent 083b067 commit 86e4b63

File tree

7 files changed

+57
-31
lines changed

7 files changed

+57
-31
lines changed

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,25 @@ You can either get a fresh `*gojay.Decoder` calling `dec := gojay.NewDecoder(io.
117117

118118
After using a decoder, you can release it by calling `dec.Release()`. Beware, if you reuse the decoder after releasing it, it will panic with an error of type `InvalidUsagePooledDecoderError`. If you want to fully benefit from the pooling, you must release your decoders after using.
119119

120+
Example getting a fresh an releasing:
121+
```go
122+
str := ""
123+
dec := gojay.NewDecoder(strings.NewReader(`"test"`))
124+
defer dec.Release()
125+
if err := dec.Decode(&str); err != nil {
126+
log.Fatal(err)
127+
}
128+
```
129+
Example borrowing a decoder and releasing:
130+
```go
131+
str := ""
132+
dec := gojay.BorrowDecoder(strings.NewReader(`"test"`))
133+
defer dec.Release()
134+
if err := dec.Decode(&str); err != nil {
135+
log.Fatal(err)
136+
}
137+
```
138+
120139
`*gojay.Decoder` has multiple methods to decode to specific types:
121140
* Decode
122141
```go

decode.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
// If a JSON value is not appropriate for a given target type, or if a JSON number
1414
// overflows the target type, UnmarshalArray skips that field and completes the unmarshaling as best it can.
1515
func UnmarshalArray(data []byte, v UnmarshalerArray) error {
16-
dec := BorrowDecoder(nil, 0)
16+
dec := BorrowDecoder(nil)
1717
defer dec.Release()
1818
dec.data = make([]byte, len(data))
1919
copy(dec.data, data)
@@ -35,7 +35,7 @@ func UnmarshalArray(data []byte, v UnmarshalerArray) error {
3535
// If a JSON value is not appropriate for a given target type, or if a JSON number
3636
// overflows the target type, UnmarshalObject skips that field and completes the unmarshaling as best it can.
3737
func UnmarshalObject(data []byte, v UnmarshalerObject) error {
38-
dec := BorrowDecoder(nil, 0)
38+
dec := BorrowDecoder(nil)
3939
defer dec.Release()
4040
dec.data = make([]byte, len(data))
4141
copy(dec.data, data)
@@ -73,53 +73,53 @@ func Unmarshal(data []byte, v interface{}) error {
7373
var dec *Decoder
7474
switch vt := v.(type) {
7575
case *string:
76-
dec = BorrowDecoder(nil, 0)
76+
dec = BorrowDecoder(nil)
7777
dec.length = len(data)
7878
dec.data = data
7979
err = dec.decodeString(vt)
8080
case *int:
81-
dec = BorrowDecoder(nil, 0)
81+
dec = BorrowDecoder(nil)
8282
dec.length = len(data)
8383
dec.data = data
8484
err = dec.decodeInt(vt)
8585
case *int32:
86-
dec = BorrowDecoder(nil, 0)
86+
dec = BorrowDecoder(nil)
8787
dec.length = len(data)
8888
dec.data = data
8989
err = dec.decodeInt32(vt)
9090
case *uint32:
91-
dec = BorrowDecoder(nil, 0)
91+
dec = BorrowDecoder(nil)
9292
dec.length = len(data)
9393
dec.data = data
9494
err = dec.decodeUint32(vt)
9595
case *int64:
96-
dec = BorrowDecoder(nil, 0)
96+
dec = BorrowDecoder(nil)
9797
dec.length = len(data)
9898
dec.data = data
9999
err = dec.decodeInt64(vt)
100100
case *uint64:
101-
dec = BorrowDecoder(nil, 0)
101+
dec = BorrowDecoder(nil)
102102
dec.length = len(data)
103103
dec.data = data
104104
err = dec.decodeUint64(vt)
105105
case *float64:
106-
dec = BorrowDecoder(nil, 0)
106+
dec = BorrowDecoder(nil)
107107
dec.length = len(data)
108108
dec.data = data
109109
err = dec.decodeFloat64(vt)
110110
case *bool:
111-
dec = BorrowDecoder(nil, 0)
111+
dec = BorrowDecoder(nil)
112112
dec.length = len(data)
113113
dec.data = data
114114
err = dec.decodeBool(vt)
115115
case UnmarshalerObject:
116-
dec = BorrowDecoder(nil, 0)
116+
dec = BorrowDecoder(nil)
117117
dec.length = len(data)
118118
dec.data = make([]byte, len(data))
119119
copy(dec.data, data)
120120
_, err = dec.decodeObject(vt)
121121
case UnmarshalerArray:
122-
dec = BorrowDecoder(nil, 0)
122+
dec = BorrowDecoder(nil)
123123
dec.length = len(data)
124124
dec.data = make([]byte, len(data))
125125
copy(dec.data, data)

decode_pool.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ func NewDecoder(r io.Reader) *Decoder {
2222
// BorrowDecoder borrows a Decoder from the pool.
2323
// It takes an io.Reader implementation as data input.
2424
// It initiates the done channel returned by Done().
25-
func BorrowDecoder(r io.Reader, bufSize int) *Decoder {
25+
func BorrowDecoder(r io.Reader) *Decoder {
26+
return borrowDecoder(r, 512)
27+
}
28+
func borrowDecoder(r io.Reader, bufSize int) *Decoder {
2629
select {
2730
case dec := <-decPool:
2831
dec.called = 0

decode_stream_pool.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ func (s stream) NewDecoder(r io.Reader) *StreamDecoder {
1919
// BorrowDecoder borrows a StreamDecoder a decoder from the pool.
2020
// It takes an io.Reader implementation as data input.
2121
// It initiates the done channel returned by Done().
22-
func (s stream) BorrowDecoder(r io.Reader, bufSize int) *StreamDecoder {
22+
func (s stream) BorrowDecoder(r io.Reader) *StreamDecoder {
23+
return s.borrowDecoder(r, 512)
24+
}
25+
26+
func (s stream) borrowDecoder(r io.Reader, bufSize int) *StreamDecoder {
2327
select {
2428
case streamDec := <-streamDecPool:
2529
streamDec.called = 0

decode_stream_pool_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ func TestDecodeStreamBorrow(t *testing.T) {
1313
dec := Stream.NewDecoder(nil)
1414
streamDecPool <- dec
1515
// borrow one decoder to the channel
16-
nDec := Stream.BorrowDecoder(nil, 0)
16+
nDec := Stream.BorrowDecoder(nil)
1717
// make sure they are the same
1818
assert.Equal(t, dec, nDec, "decoder added to the pool and new decoder should be the same")
1919
}
@@ -27,7 +27,7 @@ func TestDecodeStreamBorrow1(t *testing.T) {
2727
// reset streamDecPool
2828
streamDecPool = make(chan *StreamDecoder, 1)
2929
// borrow one decoder to the channel
30-
nDec := Stream.BorrowDecoder(nil, 0)
30+
nDec := Stream.BorrowDecoder(nil)
3131
// make sure they are the same
3232
assert.NotEqual(t, dec, nDec, "decoder added to the pool and new decoder should be the same")
3333
}
@@ -39,7 +39,7 @@ func TestDecodeStreamBorrow2(t *testing.T) {
3939
dec.data = make([]byte, 128)
4040
streamDecPool <- dec
4141
// borrow one decoder to the channel
42-
nDec := Stream.BorrowDecoder(nil, 512)
42+
nDec := Stream.BorrowDecoder(nil)
4343
// make sure they are the same
4444
assert.Equal(t, dec, nDec, "decoder added to the pool and new decoder should be the same")
4545
assert.Equal(t, 512, len(nDec.data), "len of dec.data should be 512")
@@ -48,7 +48,7 @@ func TestDecodeStreamBorrow3(t *testing.T) {
4848
// we override the pool chan
4949
streamDecPool = make(chan *StreamDecoder, 16)
5050
// borrow one decoder to the channel
51-
nDec := Stream.BorrowDecoder(nil, 512)
51+
nDec := Stream.BorrowDecoder(nil)
5252
// make sure they are the same
5353
assert.Equal(t, 512, len(nDec.data), "len of dec.data should be 512")
5454
}

decode_stream_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ func TestStreamDecodingErrNotSet(t *testing.T) {
375375
}
376376

377377
func TestStreamDecodingPoolError(t *testing.T) {
378-
dec := Stream.BorrowDecoder(nil, 0)
378+
dec := Stream.BorrowDecoder(nil)
379379
dec.Release()
380380
defer func() {
381381
err := recover()

decode_unsafe.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ var Unsafe = decUnsafe{}
1414
type decUnsafe struct{}
1515

1616
func (u decUnsafe) UnmarshalArray(data []byte, v UnmarshalerArray) error {
17-
dec := BorrowDecoder(nil, 0)
17+
dec := BorrowDecoder(nil)
1818
defer dec.Release()
1919
dec.data = data
2020
dec.length = len(data)
@@ -29,7 +29,7 @@ func (u decUnsafe) UnmarshalArray(data []byte, v UnmarshalerArray) error {
2929
}
3030

3131
func (u decUnsafe) UnmarshalObject(data []byte, v UnmarshalerObject) error {
32-
dec := BorrowDecoder(nil, 0)
32+
dec := BorrowDecoder(nil)
3333
defer dec.Release()
3434
dec.data = data
3535
dec.length = len(data)
@@ -48,52 +48,52 @@ func (u decUnsafe) Unmarshal(data []byte, v interface{}) error {
4848
var dec *Decoder
4949
switch vt := v.(type) {
5050
case *string:
51-
dec = BorrowDecoder(nil, 0)
51+
dec = BorrowDecoder(nil)
5252
dec.length = len(data)
5353
dec.data = data
5454
err = dec.decodeString(vt)
5555
case *int:
56-
dec = BorrowDecoder(nil, 0)
56+
dec = BorrowDecoder(nil)
5757
dec.length = len(data)
5858
dec.data = data
5959
err = dec.decodeInt(vt)
6060
case *int32:
61-
dec = BorrowDecoder(nil, 0)
61+
dec = BorrowDecoder(nil)
6262
dec.length = len(data)
6363
dec.data = data
6464
err = dec.decodeInt32(vt)
6565
case *uint32:
66-
dec = BorrowDecoder(nil, 0)
66+
dec = BorrowDecoder(nil)
6767
dec.length = len(data)
6868
dec.data = data
6969
err = dec.decodeUint32(vt)
7070
case *int64:
71-
dec = BorrowDecoder(nil, 0)
71+
dec = BorrowDecoder(nil)
7272
dec.length = len(data)
7373
dec.data = data
7474
err = dec.decodeInt64(vt)
7575
case *uint64:
76-
dec = BorrowDecoder(nil, 0)
76+
dec = BorrowDecoder(nil)
7777
dec.length = len(data)
7878
dec.data = data
7979
err = dec.decodeUint64(vt)
8080
case *float64:
81-
dec = BorrowDecoder(nil, 0)
81+
dec = BorrowDecoder(nil)
8282
dec.length = len(data)
8383
dec.data = data
8484
err = dec.decodeFloat64(vt)
8585
case *bool:
86-
dec = BorrowDecoder(nil, 0)
86+
dec = BorrowDecoder(nil)
8787
dec.length = len(data)
8888
dec.data = data
8989
err = dec.decodeBool(vt)
9090
case UnmarshalerObject:
91-
dec = BorrowDecoder(nil, 0)
91+
dec = BorrowDecoder(nil)
9292
dec.length = len(data)
9393
dec.data = data
9494
_, err = dec.decodeObject(vt)
9595
case UnmarshalerArray:
96-
dec = BorrowDecoder(nil, 0)
96+
dec = BorrowDecoder(nil)
9797
dec.length = len(data)
9898
dec.data = data
9999
_, err = dec.decodeArray(vt)

0 commit comments

Comments
 (0)