diff options
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.go | 61 |
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 -} - |