1
0
mirror of https://github.com/json-iterator/go.git synced 2025-06-18 22:57:33 +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 { type Any interface {
LastError() error LastError() error
ValueType() ValueType ValueType() ValueType
MustBeValid() Any
ToBool() bool ToBool() bool
ToInt() int ToInt() int
ToInt32() int32 ToInt32() int32
@ -218,15 +219,21 @@ func locatePath(iter *Iterator, path []interface{}) Any {
switch pathKey := pathKeyObj.(type) { switch pathKey := pathKeyObj.(type) {
case string: case string:
valueBytes := locateObjectField(iter, pathKey) valueBytes := locateObjectField(iter, pathKey)
if valueBytes == nil {
return newInvalidAny(path[i:])
}
iter.ResetBytes(valueBytes) iter.ResetBytes(valueBytes)
case int: case int:
valueBytes := locateArrayElement(iter, pathKey) valueBytes := locateArrayElement(iter, pathKey)
if valueBytes == nil {
return newInvalidAny(path[i:])
}
iter.ResetBytes(valueBytes) iter.ResetBytes(valueBytes)
case int32: case int32:
if '*' == pathKey { if '*' == pathKey {
return iter.readAny().Get(path[i:]...) return iter.readAny().Get(path[i:]...)
} else { } else {
return newInvalidAny(path) return newInvalidAny(path[i:])
} }
default: default:
return newInvalidAny(path[i:]) return newInvalidAny(path[i:])
@ -236,4 +243,4 @@ func locatePath(iter *Iterator, path []interface{}) Any {
return &invalidAny{baseAny{}, iter.Error} return &invalidAny{baseAny{}, iter.Error}
} }
return iter.readAny() return iter.readAny()
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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