mirror of
https://github.com/json-iterator/go.git
synced 2025-05-13 21:36:29 +02:00
implement Any WriteTo
This commit is contained in:
parent
9b587c0f22
commit
4d7e181f9f
@ -59,9 +59,6 @@ func (any *baseAny) SetObject(map[string]Any) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *baseAny) WriteTo(stream *Stream) {
|
|
||||||
}
|
|
||||||
|
|
||||||
func WrapInt64(val int64) Any {
|
func WrapInt64(val int64) Any {
|
||||||
return &intAny{baseAny{}, nil, val}
|
return &intAny{baseAny{}, nil, val}
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ func (any *arrayLazyAny) fillCache() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) LastError() error {
|
func (any *arrayLazyAny) LastError() error {
|
||||||
return nil
|
return any.err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) ToBool() bool {
|
func (any *arrayLazyAny) ToBool() bool {
|
||||||
@ -156,7 +156,15 @@ func (any *arrayLazyAny) ToFloat64() float64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) ToString() string {
|
func (any *arrayLazyAny) ToString() string {
|
||||||
return ""
|
if len(any.remaining) == len(any.buf) {
|
||||||
|
// nothing has been parsed yet
|
||||||
|
return *(*string)(unsafe.Pointer(&any.buf))
|
||||||
|
} else {
|
||||||
|
any.fillCache()
|
||||||
|
str, err := MarshalToString(any.cache)
|
||||||
|
any.err = err
|
||||||
|
return str
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) Get(path ...interface{}) Any {
|
func (any *arrayLazyAny) Get(path ...interface{}) Any {
|
||||||
@ -252,7 +260,7 @@ func (any *arrayLazyAny) SetArray(newList []Any) bool {
|
|||||||
func (any *arrayLazyAny) WriteTo(stream *Stream) {
|
func (any *arrayLazyAny) WriteTo(stream *Stream) {
|
||||||
if len(any.remaining) == len(any.buf) {
|
if len(any.remaining) == len(any.buf) {
|
||||||
// nothing has been parsed yet
|
// nothing has been parsed yet
|
||||||
stream.WriteRaw(*(*string)(unsafe.Pointer(&any.buf)))
|
stream.Write(any.buf)
|
||||||
} else {
|
} else {
|
||||||
any.fillCache()
|
any.fillCache()
|
||||||
stream.WriteVal(any.cache)
|
stream.WriteVal(any.cache)
|
||||||
|
@ -36,6 +36,10 @@ func (any *trueAny) ToString() string {
|
|||||||
return "true"
|
return "true"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (any *trueAny) WriteTo(stream *Stream) {
|
||||||
|
stream.WriteTrue()
|
||||||
|
}
|
||||||
|
|
||||||
type falseAny struct {
|
type falseAny struct {
|
||||||
baseAny
|
baseAny
|
||||||
}
|
}
|
||||||
@ -71,3 +75,7 @@ func (any *falseAny) ToFloat64() float64 {
|
|||||||
func (any *falseAny) ToString() string {
|
func (any *falseAny) ToString() string {
|
||||||
return "false"
|
return "false"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (any *falseAny) WriteTo(stream *Stream) {
|
||||||
|
stream.WriteFalse()
|
||||||
|
}
|
||||||
|
@ -64,4 +64,8 @@ func (any *floatLazyAny) ToFloat64() float64 {
|
|||||||
|
|
||||||
func (any *floatLazyAny) ToString() string {
|
func (any *floatLazyAny) ToString() string {
|
||||||
return *(*string)(unsafe.Pointer(&any.buf))
|
return *(*string)(unsafe.Pointer(&any.buf))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (any *floatLazyAny) WriteTo(stream *Stream) {
|
||||||
|
stream.Write(any.buf)
|
||||||
}
|
}
|
@ -68,7 +68,7 @@ func (any *intLazyAny) ToString() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (any *intLazyAny) WriteTo(stream *Stream) {
|
func (any *intLazyAny) WriteTo(stream *Stream) {
|
||||||
stream.WriteRaw(*(*string)(unsafe.Pointer(&any.buf)))
|
stream.Write(any.buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
type intAny struct {
|
type intAny struct {
|
||||||
|
@ -36,6 +36,9 @@ func (any *invalidAny) ToString() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (any *invalidAny) WriteTo(stream *Stream) {
|
||||||
|
}
|
||||||
|
|
||||||
func (any *invalidAny) Get(path ...interface{}) Any {
|
func (any *invalidAny) Get(path ...interface{}) Any {
|
||||||
return any
|
return any
|
||||||
}
|
}
|
||||||
|
@ -33,5 +33,9 @@ func (any *nilAny) ToFloat64() float64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (any *nilAny) ToString() string {
|
func (any *nilAny) ToString() string {
|
||||||
return ""
|
return "nil"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (any *nilAny) WriteTo(stream *Stream) {
|
||||||
|
stream.WriteNil()
|
||||||
}
|
}
|
@ -277,7 +277,7 @@ func (any *objectLazyAny) SetObject(val map[string]Any) bool {
|
|||||||
func (any *objectLazyAny) WriteTo(stream *Stream) {
|
func (any *objectLazyAny) WriteTo(stream *Stream) {
|
||||||
if len(any.remaining) == len(any.buf) {
|
if len(any.remaining) == len(any.buf) {
|
||||||
// nothing has been parsed yet
|
// nothing has been parsed yet
|
||||||
stream.WriteRaw(*(*string)(unsafe.Pointer(&any.buf)))
|
stream.Write(any.buf)
|
||||||
} else {
|
} else {
|
||||||
any.fillCache()
|
any.fillCache()
|
||||||
stream.WriteVal(any.cache)
|
stream.WriteVal(any.cache)
|
||||||
|
@ -96,4 +96,8 @@ func (any *stringLazyAny) ToFloat64() float64 {
|
|||||||
func (any *stringLazyAny) ToString() string {
|
func (any *stringLazyAny) ToString() string {
|
||||||
any.fillCache()
|
any.fillCache()
|
||||||
return any.cache
|
return any.cache
|
||||||
|
}
|
||||||
|
|
||||||
|
func (any *stringLazyAny) WriteTo(stream *Stream) {
|
||||||
|
stream.Write(any.buf)
|
||||||
}
|
}
|
@ -87,6 +87,7 @@ func Test_array_lazy_any_get(t *testing.T) {
|
|||||||
any, err := UnmarshalAnyFromString("[1,[2,3],4]")
|
any, err := UnmarshalAnyFromString("[1,[2,3],4]")
|
||||||
should.Nil(err)
|
should.Nil(err)
|
||||||
should.Equal(3, any.Get(1,1).ToInt())
|
should.Equal(3, any.Get(1,1).ToInt())
|
||||||
|
should.Equal("[1,[2,3],4]", any.ToString())
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_array_lazy_any_set(t *testing.T) {
|
func Test_array_lazy_any_set(t *testing.T) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user