1
0
mirror of https://github.com/json-iterator/go.git synced 2025-02-10 19:41:53 +02:00

add MustBeValid to Any

This commit is contained in:
Tao Wen 2017-06-19 21:21:20 +08:00
parent 514db10f97
commit baca358b53
13 changed files with 74 additions and 2 deletions

View File

@ -9,6 +9,7 @@ import (
type Any interface {
LastError() error
ValueType() ValueType
MustBeValid() Any
ToBool() bool
ToInt() int
ToInt32() int32
@ -218,15 +219,21 @@ func locatePath(iter *Iterator, path []interface{}) Any {
switch pathKey := pathKeyObj.(type) {
case string:
valueBytes := locateObjectField(iter, pathKey)
if valueBytes == nil {
return newInvalidAny(path[i:])
}
iter.ResetBytes(valueBytes)
case int:
valueBytes := locateArrayElement(iter, pathKey)
if valueBytes == nil {
return newInvalidAny(path[i:])
}
iter.ResetBytes(valueBytes)
case int32:
if '*' == pathKey {
return iter.readAny().Get(path[i:]...)
} else {
return newInvalidAny(path)
return newInvalidAny(path[i:])
}
default:
return newInvalidAny(path[i:])
@ -236,4 +243,4 @@ func locatePath(iter *Iterator, path []interface{}) Any {
return &invalidAny{baseAny{}, iter.Error}
}
return iter.readAny()
}
}

View File

@ -16,6 +16,10 @@ func (any *arrayLazyAny) ValueType() ValueType {
return Array
}
func (any *arrayLazyAny) MustBeValid() Any {
return any
}
func (any *arrayLazyAny) LastError() error {
return any.err
}
@ -182,6 +186,10 @@ func (any *arrayAny) ValueType() ValueType {
return Array
}
func (any *arrayAny) MustBeValid() Any {
return any
}
func (any *arrayAny) LastError() error {
return nil
}

View File

@ -64,6 +64,10 @@ func (any *trueAny) ValueType() ValueType {
return Bool
}
func (any *trueAny) MustBeValid() Any {
return any
}
type falseAny struct {
baseAny
}
@ -127,3 +131,7 @@ func (any *falseAny) GetInterface() interface{} {
func (any *falseAny) ValueType() ValueType {
return Bool
}
func (any *falseAny) MustBeValid() Any {
return any
}

View File

@ -18,6 +18,10 @@ func (any *floatAny) ValueType() ValueType {
return Number
}
func (any *floatAny) MustBeValid() Any {
return any
}
func (any *floatAny) LastError() error {
return nil
}

View File

@ -17,6 +17,10 @@ func (any *int32Any) ValueType() ValueType {
return Number
}
func (any *int32Any) MustBeValid() Any {
return any
}
func (any *int32Any) ToBool() bool {
return any.val != 0
}

View File

@ -17,6 +17,10 @@ func (any *int64Any) ValueType() ValueType {
return Number
}
func (any *int64Any) MustBeValid() Any {
return any
}
func (any *int64Any) ToBool() bool {
return any.val != 0
}

View File

@ -19,6 +19,11 @@ func (any *invalidAny) ValueType() ValueType {
return Invalid
}
func (any *invalidAny) MustBeValid() Any {
panic(any.err)
return any
}
func (any *invalidAny) ToBool() bool {
return false
}

View File

@ -12,6 +12,10 @@ func (any *nilAny) ValueType() ValueType {
return Nil
}
func (any *nilAny) MustBeValid() Any {
return any
}
func (any *nilAny) ToBool() bool {
return false
}

View File

@ -15,6 +15,10 @@ func (any *numberLazyAny) ValueType() ValueType {
return Number
}
func (any *numberLazyAny) MustBeValid() Any {
return any
}
func (any *numberLazyAny) LastError() error {
return any.err
}

View File

@ -16,6 +16,10 @@ func (any *objectLazyAny) ValueType() ValueType {
return Object
}
func (any *objectLazyAny) MustBeValid() Any {
return any
}
func (any *objectLazyAny) LastError() error {
return any.err
}
@ -195,6 +199,10 @@ func (any *objectAny) ValueType() ValueType {
return Object
}
func (any *objectAny) MustBeValid() Any {
return any
}
func (any *objectAny) Parse() *Iterator {
return nil
}
@ -346,6 +354,10 @@ func (any *mapAny) ValueType() ValueType {
return Object
}
func (any *mapAny) MustBeValid() Any {
return any
}
func (any *mapAny) Parse() *Iterator {
return nil
}

View File

@ -25,6 +25,10 @@ func (any *stringAny) ValueType() ValueType {
return String
}
func (any *stringAny) MustBeValid() Any {
return any
}
func (any *stringAny) LastError() error {
return nil
}

View File

@ -17,6 +17,10 @@ func (any *uint32Any) ValueType() ValueType {
return Number
}
func (any *uint32Any) MustBeValid() Any {
return any
}
func (any *uint32Any) ToBool() bool {
return any.val != 0
}

View File

@ -17,6 +17,10 @@ func (any *uint64Any) ValueType() ValueType {
return Number
}
func (any *uint64Any) MustBeValid() Any {
return any
}
func (any *uint64Any) ToBool() bool {
return any.val != 0
}