summaryrefslogtreecommitdiff
path: root/vendor/github.com/bytedance/sonic/internal/decoder/optdec/structs.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/bytedance/sonic/internal/decoder/optdec/structs.go')
-rw-r--r--vendor/github.com/bytedance/sonic/internal/decoder/optdec/structs.go61
1 files changed, 0 insertions, 61 deletions
diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/optdec/structs.go b/vendor/github.com/bytedance/sonic/internal/decoder/optdec/structs.go
deleted file mode 100644
index bce2758f1..000000000
--- a/vendor/github.com/bytedance/sonic/internal/decoder/optdec/structs.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package optdec
-
-import (
- "reflect"
- "unsafe"
-
- caching "github.com/bytedance/sonic/internal/optcaching"
- "github.com/bytedance/sonic/internal/resolver"
-)
-
-type fieldEntry struct {
- resolver.FieldMeta
- fieldDec decFunc
-}
-
-type structDecoder struct {
- fieldMap caching.FieldLookup
- fields []fieldEntry
- structName string
- typ reflect.Type
-}
-
-func (d *structDecoder) FromDom(vp unsafe.Pointer, node Node, ctx *context) error {
- if node.IsNull() {
- return nil
- }
-
- var gerr error
- obj, ok := node.AsObj()
- if !ok {
- return error_mismatch(node, ctx, d.typ)
- }
-
- next := obj.Children()
- for i := 0; i < obj.Len(); i++ {
- key, _ := NewNode(next).AsStrRef(ctx)
- val := NewNode(PtrOffset(next, 1))
- next = val.Next()
-
- // find field idx
- idx := d.fieldMap.Get(key)
- if idx == -1 {
- if Options(ctx.Options())&OptionDisableUnknown != 0 {
- return error_field(key)
- }
- continue
- }
-
- offset := d.fields[idx].Path[0].Size
- elem := unsafe.Pointer(uintptr(vp) + offset)
- err := d.fields[idx].fieldDec.FromDom(elem, val, ctx)
-
- // deal with mismatch type errors
- if gerr == nil && err != nil {
- // TODO: better error info
- gerr = err
- }
- }
- return gerr
-}
-