diff options
Diffstat (limited to 'vendor/github.com/goccy/go-json/decode_anonymous_field.go')
-rw-r--r-- | vendor/github.com/goccy/go-json/decode_anonymous_field.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/vendor/github.com/goccy/go-json/decode_anonymous_field.go b/vendor/github.com/goccy/go-json/decode_anonymous_field.go new file mode 100644 index 000000000..77931f2ff --- /dev/null +++ b/vendor/github.com/goccy/go-json/decode_anonymous_field.go @@ -0,0 +1,35 @@ +package json + +import ( + "unsafe" +) + +type anonymousFieldDecoder struct { + structType *rtype + offset uintptr + dec decoder +} + +func newAnonymousFieldDecoder(structType *rtype, offset uintptr, dec decoder) *anonymousFieldDecoder { + return &anonymousFieldDecoder{ + structType: structType, + offset: offset, + dec: dec, + } +} + +func (d *anonymousFieldDecoder) decodeStream(s *stream, depth int64, p unsafe.Pointer) error { + if *(*unsafe.Pointer)(p) == nil { + *(*unsafe.Pointer)(p) = unsafe_New(d.structType) + } + p = *(*unsafe.Pointer)(p) + return d.dec.decodeStream(s, depth, unsafe.Pointer(uintptr(p)+d.offset)) +} + +func (d *anonymousFieldDecoder) decode(buf []byte, cursor, depth int64, p unsafe.Pointer) (int64, error) { + if *(*unsafe.Pointer)(p) == nil { + *(*unsafe.Pointer)(p) = unsafe_New(d.structType) + } + p = *(*unsafe.Pointer)(p) + return d.dec.decode(buf, cursor, depth, unsafe.Pointer(uintptr(p)+d.offset)) +} |