summaryrefslogtreecommitdiff
path: root/vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2022-09-28 18:30:40 +0100
committerLibravatar GitHub <noreply@github.com>2022-09-28 18:30:40 +0100
commita156188b3eb5cb3da44aa1b7452265f5fa38a607 (patch)
tree7097fa48d56fbabc7c2c8750b1f3bc9321d71c0f /vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go
parent[bugfix] Fix emphasis being added to emoji shortcodes with markdown parsing (... (diff)
downloadgotosocial-a156188b3eb5cb3da44aa1b7452265f5fa38a607.tar.xz
[chore] update dependencies, bump to Go 1.19.1 (#826)
* update dependencies, bump Go version to 1.19 * bump test image Go version * update golangci-lint * update gotosocial-drone-build * sign * linting, go fmt * update swagger docs * update swagger docs * whitespace * update contributing.md * fuckin whoopsie doopsie * linterino, linteroni * fix followrequest test not starting processor * fix other api/client tests not starting processor * fix remaining tests where processor not started * bump go-runners version * don't check last-webfingered-at, processor may have updated this * update swagger command * update bun to latest version * fix embed to work the same as before with new bun Signed-off-by: kim <grufwub@gmail.com> Co-authored-by: tsmethurst <tobi.smethurst@protonmail.com>
Diffstat (limited to 'vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go')
-rw-r--r--vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go99
1 files changed, 99 insertions, 0 deletions
diff --git a/vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go b/vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go
new file mode 100644
index 000000000..e9b25c68f
--- /dev/null
+++ b/vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go
@@ -0,0 +1,99 @@
+package decoder
+
+import (
+ "context"
+ "encoding/json"
+ "unsafe"
+
+ "github.com/goccy/go-json/internal/errors"
+ "github.com/goccy/go-json/internal/runtime"
+)
+
+type unmarshalJSONDecoder struct {
+ typ *runtime.Type
+ structName string
+ fieldName string
+}
+
+func newUnmarshalJSONDecoder(typ *runtime.Type, structName, fieldName string) *unmarshalJSONDecoder {
+ return &unmarshalJSONDecoder{
+ typ: typ,
+ structName: structName,
+ fieldName: fieldName,
+ }
+}
+
+func (d *unmarshalJSONDecoder) annotateError(cursor int64, err error) {
+ switch e := err.(type) {
+ case *errors.UnmarshalTypeError:
+ e.Struct = d.structName
+ e.Field = d.fieldName
+ case *errors.SyntaxError:
+ e.Offset = cursor
+ }
+}
+
+func (d *unmarshalJSONDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {
+ s.skipWhiteSpace()
+ start := s.cursor
+ if err := s.skipValue(depth); err != nil {
+ return err
+ }
+ src := s.buf[start:s.cursor]
+ dst := make([]byte, len(src))
+ copy(dst, src)
+
+ v := *(*interface{})(unsafe.Pointer(&emptyInterface{
+ typ: d.typ,
+ ptr: p,
+ }))
+ switch v := v.(type) {
+ case unmarshalerContext:
+ var ctx context.Context
+ if (s.Option.Flags & ContextOption) != 0 {
+ ctx = s.Option.Context
+ } else {
+ ctx = context.Background()
+ }
+ if err := v.UnmarshalJSON(ctx, dst); err != nil {
+ d.annotateError(s.cursor, err)
+ return err
+ }
+ case json.Unmarshaler:
+ if err := v.UnmarshalJSON(dst); err != nil {
+ d.annotateError(s.cursor, err)
+ return err
+ }
+ }
+ return nil
+}
+
+func (d *unmarshalJSONDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {
+ buf := ctx.Buf
+ cursor = skipWhiteSpace(buf, cursor)
+ start := cursor
+ end, err := skipValue(buf, cursor, depth)
+ if err != nil {
+ return 0, err
+ }
+ src := buf[start:end]
+ dst := make([]byte, len(src))
+ copy(dst, src)
+
+ v := *(*interface{})(unsafe.Pointer(&emptyInterface{
+ typ: d.typ,
+ ptr: p,
+ }))
+ if (ctx.Option.Flags & ContextOption) != 0 {
+ if err := v.(unmarshalerContext).UnmarshalJSON(ctx.Option.Context, dst); err != nil {
+ d.annotateError(cursor, err)
+ return 0, err
+ }
+ } else {
+ if err := v.(json.Unmarshaler).UnmarshalJSON(dst); err != nil {
+ d.annotateError(cursor, err)
+ return 0, err
+ }
+ }
+ return end, nil
+}