commit df5e7d62d422f09ce7b74b3437ab70e5b6597eaa
parent f5587822347e46494d4d53e918709c4db4ec2de2
Author: francoispqt <francois@parquet.ninja>
Date: Thu, 6 Sep 2018 09:02:39 +0800
add fix on decode interface for bool and nulls
Diffstat:
11 files changed, 16 insertions(+), 46 deletions(-)
diff --git a/.travis.yml b/.travis.yml
@@ -2,6 +2,7 @@ language: go
go:
- "1.10.x"
+ - "1.11.x"
- master
script:
diff --git a/decode_array.go b/decode_array.go
@@ -42,7 +42,6 @@ func (dec *Decoder) decodeArray(arr UnmarshalerJSONArray) (int, error) {
if err != nil {
return 0, err
}
- dec.cursor++
return dec.cursor, nil
case '{', '"', 'f', 't', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
// can't unmarshall to struct
@@ -105,7 +104,6 @@ func (dec *Decoder) decodeArrayNull(v interface{}) (int, error) {
if err != nil {
return 0, err
}
- dec.cursor++
return dec.cursor, nil
case '{', '"', 'f', 't', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
// can't unmarshall to struct
diff --git a/decode_bool.go b/decode_bool.go
@@ -21,7 +21,6 @@ func (dec *Decoder) decodeBool(v *bool) error {
return err
}
*v = true
- dec.cursor++
return nil
case 'f':
dec.cursor++
@@ -30,7 +29,6 @@ func (dec *Decoder) decodeBool(v *bool) error {
return err
}
*v = false
- dec.cursor++
return nil
case 'n':
dec.cursor++
@@ -39,7 +37,6 @@ func (dec *Decoder) decodeBool(v *bool) error {
return err
}
*v = false
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -67,7 +64,6 @@ func (dec *Decoder) decodeBoolNull(v **bool) error {
*v = new(bool)
}
**v = true
- dec.cursor++
return nil
case 'f':
dec.cursor++
@@ -79,7 +75,6 @@ func (dec *Decoder) decodeBoolNull(v **bool) error {
*v = new(bool)
}
**v = false
- dec.cursor++
return nil
case 'n':
dec.cursor++
@@ -87,7 +82,6 @@ func (dec *Decoder) decodeBoolNull(v **bool) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -119,8 +113,8 @@ func (dec *Decoder) assertTrue() error {
}
case 3:
switch dec.data[dec.cursor] {
- case ' ', '\t', '\n', ',', ']', '}':
- dec.cursor--
+ case ' ', '\b', '\t', '\n', ',', ']', '}':
+ // dec.cursor--
return nil
default:
return dec.raiseInvalidJSONErr(dec.cursor)
@@ -153,7 +147,7 @@ func (dec *Decoder) assertNull() error {
case 3:
switch dec.data[dec.cursor] {
case ' ', '\t', '\n', ',', ']', '}':
- dec.cursor--
+ // dec.cursor--
return nil
default:
return dec.raiseInvalidJSONErr(dec.cursor)
@@ -190,7 +184,7 @@ func (dec *Decoder) assertFalse() error {
case 4:
switch dec.data[dec.cursor] {
case ' ', '\t', '\n', ',', ']', '}':
- dec.cursor--
+ // dec.cursor--
return nil
default:
return dec.raiseInvalidJSONErr(dec.cursor)
diff --git a/decode_embedded_json.go b/decode_embedded_json.go
@@ -22,7 +22,6 @@ func (dec *Decoder) decodeEmbeddedJSON(ej *EmbeddedJSON) error {
if err != nil {
return err
}
- dec.cursor++
case 't':
beginOfEmbeddedJSON = dec.cursor
dec.cursor++
@@ -30,7 +29,6 @@ func (dec *Decoder) decodeEmbeddedJSON(ej *EmbeddedJSON) error {
if err != nil {
return err
}
- dec.cursor++
// is false
case 'f':
beginOfEmbeddedJSON = dec.cursor
@@ -39,7 +37,6 @@ func (dec *Decoder) decodeEmbeddedJSON(ej *EmbeddedJSON) error {
if err != nil {
return err
}
- dec.cursor++
// is an object
case '{':
beginOfEmbeddedJSON = dec.cursor
diff --git a/decode_interface.go b/decode_interface.go
@@ -4,6 +4,7 @@ package gojay
// the future it would be great to implement one here inside this repo
import (
"encoding/json"
+ "log"
)
// DecodeInterface reads the next JSON-encoded value from its input and stores it in the value pointed to by i.
@@ -30,6 +31,7 @@ func (dec *Decoder) decodeInterface(i *interface{}) error {
}
object := dec.data[start:end]
+ log.Print(string(object))
if err = json.Unmarshal(object, i); err != nil {
return err
}
@@ -41,7 +43,7 @@ func (dec *Decoder) decodeInterface(i *interface{}) error {
// @afiune Maybe return the type as well?
func (dec *Decoder) getObject() (start int, end int, err error) {
// start cursor
- start = dec.cursor
+ log.Print(string(dec.data[dec.cursor:]))
for ; dec.cursor < dec.length || dec.read(); dec.cursor++ {
switch dec.data[dec.cursor] {
case ' ', '\n', '\t', '\r', ',':
@@ -57,9 +59,9 @@ func (dec *Decoder) getObject() (start int, end int, err error) {
// is a null and should not be unmarshal
start = dec.cursor
end = dec.cursor
- dec.cursor++
return
case 't':
+ start = dec.cursor
dec.cursor++
err = dec.assertTrue()
if err != nil {
@@ -70,6 +72,7 @@ func (dec *Decoder) getObject() (start int, end int, err error) {
return
// is false
case 'f':
+ start = dec.cursor
dec.cursor++
err = dec.assertFalse()
if err != nil {
@@ -80,12 +83,14 @@ func (dec *Decoder) getObject() (start int, end int, err error) {
return
// is an object
case '{':
+ start = dec.cursor
dec.cursor++
end, err = dec.skipObject()
dec.cursor = end
return
// is string
case '"':
+ start = dec.cursor
dec.cursor++
start, end, err = dec.getString()
start--
@@ -93,11 +98,13 @@ func (dec *Decoder) getObject() (start int, end int, err error) {
return
// is array
case '[':
+ start = dec.cursor
dec.cursor++
end, err = dec.skipArray()
dec.cursor = end
return
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-':
+ start = dec.cursor
end, err = dec.skipNumber()
dec.cursor = end
return
diff --git a/decode_interface_test.go b/decode_interface_test.go
@@ -2,6 +2,7 @@ package gojay
import (
"encoding/json"
+ "log"
"strings"
"testing"
@@ -127,6 +128,7 @@ func TestDecodeInterfaceBasic(t *testing.T) {
for _, testCase := range testCases {
t.Run("DecodeInterface()"+testCase.name, func(t *testing.T) {
+ log.Print(testCase.name)
var i interface{}
dec := BorrowDecoder(strings.NewReader(testCase.json))
defer dec.Release()
diff --git a/decode_number_float.go b/decode_number_float.go
@@ -35,7 +35,6 @@ func (dec *Decoder) decodeFloat64(v *float64) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -80,7 +79,6 @@ func (dec *Decoder) decodeFloat64Null(v **float64) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -230,7 +228,6 @@ func (dec *Decoder) decodeFloat32(v *float32) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -275,7 +272,6 @@ func (dec *Decoder) decodeFloat32Null(v **float32) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
diff --git a/decode_number_int.go b/decode_number_int.go
@@ -41,7 +41,6 @@ func (dec *Decoder) decodeInt(v *int) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = InvalidUnmarshalError(
@@ -94,7 +93,6 @@ func (dec *Decoder) decodeIntNull(v **int) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = InvalidUnmarshalError(
@@ -150,7 +148,6 @@ func (dec *Decoder) decodeInt16(v *int16) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -196,7 +193,6 @@ func (dec *Decoder) decodeInt16Null(v **int16) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -384,7 +380,6 @@ func (dec *Decoder) decodeInt8(v *int8) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -430,7 +425,6 @@ func (dec *Decoder) decodeInt8Null(v **int8) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -616,7 +610,6 @@ func (dec *Decoder) decodeInt32(v *int32) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -661,7 +654,6 @@ func (dec *Decoder) decodeInt32Null(v **int32) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -849,7 +841,6 @@ func (dec *Decoder) decodeInt64(v *int64) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -894,7 +885,6 @@ func (dec *Decoder) decodeInt64Null(v **int64) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
diff --git a/decode_number_uint.go b/decode_number_uint.go
@@ -39,7 +39,6 @@ func (dec *Decoder) decodeUint8(v *uint8) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -83,7 +82,6 @@ func (dec *Decoder) decodeUint8Null(v **uint8) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -153,7 +151,6 @@ func (dec *Decoder) decodeUint16(v *uint16) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -197,7 +194,6 @@ func (dec *Decoder) decodeUint16Null(v **uint16) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -267,7 +263,6 @@ func (dec *Decoder) decodeUint32(v *uint32) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -311,7 +306,6 @@ func (dec *Decoder) decodeUint32Null(v **uint32) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -380,7 +374,6 @@ func (dec *Decoder) decodeUint64(v *uint64) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -424,7 +417,6 @@ func (dec *Decoder) decodeUint64Null(v **uint64) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
diff --git a/decode_object.go b/decode_object.go
@@ -86,7 +86,6 @@ func (dec *Decoder) decodeObject(j UnmarshalerJSONObject) (int, error) {
if err != nil {
return 0, err
}
- dec.cursor++
return dec.cursor, nil
default:
// can't unmarshal to struct
@@ -186,7 +185,6 @@ func (dec *Decoder) decodeObjectNull(v interface{}) (int, error) {
if err != nil {
return 0, err
}
- dec.cursor++
return dec.cursor, nil
default:
// can't unmarshal to struct
@@ -300,7 +298,6 @@ func (dec *Decoder) skipData() error {
if err != nil {
return err
}
- dec.cursor++
return nil
case 't':
dec.cursor++
@@ -308,7 +305,6 @@ func (dec *Decoder) skipData() error {
if err != nil {
return err
}
- dec.cursor++
return nil
// is false
case 'f':
@@ -317,7 +313,6 @@ func (dec *Decoder) skipData() error {
if err != nil {
return err
}
- dec.cursor++
return nil
// is an object
case '{':
diff --git a/decode_string.go b/decode_string.go
@@ -37,7 +37,6 @@ func (dec *Decoder) decodeString(v *string) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)
@@ -78,7 +77,6 @@ func (dec *Decoder) decodeStringNull(v **string) error {
if err != nil {
return err
}
- dec.cursor++
return nil
default:
dec.err = dec.makeInvalidUnmarshalErr(v)