1
0
mirror of https://github.com/json-iterator/go.git synced 2025-03-26 21:12:40 +02:00

#34 support More() and Buffered()

This commit is contained in:
Tao Wen 2017-06-02 16:00:12 +08:00
parent a7f992f0e1
commit 69b742e73a
2 changed files with 26 additions and 2 deletions

View File

@ -112,4 +112,13 @@ type AdaptedDecoder struct {
func (adapter *AdaptedDecoder) Decode(obj interface{}) error { func (adapter *AdaptedDecoder) Decode(obj interface{}) error {
adapter.iter.ReadVal(obj) adapter.iter.ReadVal(obj)
return adapter.iter.Error return adapter.iter.Error
}
func (adapter *AdaptedDecoder) More() bool {
return adapter.iter.head != adapter.iter.tail
}
func (adapter *AdaptedDecoder) Buffered() io.Reader {
remaining := adapter.iter.buf[adapter.iter.head:adapter.iter.tail]
return bytes.NewReader(remaining)
} }

View File

@ -5,15 +5,30 @@ import (
"github.com/json-iterator/go/require" "github.com/json-iterator/go/require"
"encoding/json" "encoding/json"
"bytes" "bytes"
"io/ioutil"
) )
func Test_new_decoder(t *testing.T) { func Test_new_decoder(t *testing.T) {
should := require.New(t) should := require.New(t)
decoder1 := json.NewDecoder(bytes.NewBufferString(`[1]`)) decoder1 := json.NewDecoder(bytes.NewBufferString(`[1][2]`))
decoder2 := NewDecoder(bytes.NewBufferString(`[1]`)) decoder2 := NewDecoder(bytes.NewBufferString(`[1][2]`))
arr1 := []int{} arr1 := []int{}
should.Nil(decoder1.Decode(&arr1)) should.Nil(decoder1.Decode(&arr1))
should.Equal([]int{1}, arr1) should.Equal([]int{1}, arr1)
arr2 := []int{} arr2 := []int{}
should.True(decoder1.More())
buffered, _ := ioutil.ReadAll(decoder1.Buffered())
should.Equal("[2]", string(buffered))
should.Nil(decoder2.Decode(&arr2)) should.Nil(decoder2.Decode(&arr2))
should.Equal([]int{1}, arr2)
should.True(decoder2.More())
buffered, _ = ioutil.ReadAll(decoder2.Buffered())
should.Equal("[2]", string(buffered))
should.Nil(decoder1.Decode(&arr1))
should.Equal([]int{2}, arr1)
should.False(decoder1.More())
should.Nil(decoder2.Decode(&arr2))
should.Equal([]int{2}, arr2)
should.False(decoder2.More())
} }