mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-01-23 14:50:21 +00:00
4d423102c1
Bumps [github.com/gin-contrib/gzip](https://github.com/gin-contrib/gzip) from 1.0.1 to 1.1.0. - [Release notes](https://github.com/gin-contrib/gzip/releases) - [Changelog](https://github.com/gin-contrib/gzip/blob/master/.goreleaser.yaml) - [Commits](https://github.com/gin-contrib/gzip/compare/v1.0.1...v1.1.0) --- updated-dependencies: - dependency-name: github.com/gin-contrib/gzip dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
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
|
|
}
|
|
|