diff options
| author | 2025-10-13 16:49:53 +0200 | |
|---|---|---|
| committer | 2025-10-17 15:32:55 +0200 | |
| commit | ea7eeada77a52fd58a9e1a949a39eccc7bce955a (patch) | |
| tree | ede9f651d0bd7782b565883f9384341530f8320f /vendor/github.com/bytedance/sonic/internal/encoder/prim/primitives.go | |
| parent | [bugfix] repeated posts on timeline endpoints (#4494) (diff) | |
| download | gotosocial-ea7eeada77a52fd58a9e1a949a39eccc7bce955a.tar.xz | |
[chore] update dependencies (#4495)
- github.com/coreos/go-oidc/v3: v3.15.0 -> v3.16.0
- github.com/go-playground/form/v4: v4.2.1 -> v4.3.0
- github.com/go-swagger/go-swagger: v0.32.3 -> v0.33.1
- golang.org/x/crypto: v0.42.0 -> v0.43.0
- golang.org/x/image: v0.31.0 -> v0.32.0
- golang.org/x/net: v0.45.0 -> v0.46.0
- golang.org/x/oauth2: v0.31.0 -> v0.32.0
- golang.org/x/sys: v0.36.0 -> v0.37.0
- golang.org/x/text: v0.29.0 -> v0.30.0
- modernc.org/sqlite: v1.39.0 -> v1.39.1 (w/ concurrency workaround)
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4495
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/github.com/bytedance/sonic/internal/encoder/prim/primitives.go')
| -rw-r--r-- | vendor/github.com/bytedance/sonic/internal/encoder/prim/primitives.go | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/prim/primitives.go b/vendor/github.com/bytedance/sonic/internal/encoder/prim/primitives.go new file mode 100644 index 000000000..ec4d2f5ca --- /dev/null +++ b/vendor/github.com/bytedance/sonic/internal/encoder/prim/primitives.go @@ -0,0 +1,105 @@ +/** + * Copyright 2024 ByteDance Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package prim + +import ( + "encoding" + "encoding/json" + "reflect" + "unsafe" + + "github.com/bytedance/sonic/internal/encoder/alg" + "github.com/bytedance/sonic/internal/encoder/vars" + "github.com/bytedance/sonic/internal/resolver" + "github.com/bytedance/sonic/internal/rt" +) + +func Compact(p *[]byte, v []byte) error { + buf := vars.NewBuffer() + err := json.Compact(buf, v) + + /* check for errors */ + if err != nil { + return err + } + + /* add to result */ + v = buf.Bytes() + *p = append(*p, v...) + + /* return the buffer into pool */ + vars.FreeBuffer(buf) + return nil +} + +func EncodeNil(rb *[]byte) error { + *rb = append(*rb, 'n', 'u', 'l', 'l') + return nil +} + +// func Make_EncodeTypedPointer(computor func(*rt.GoType, ...interface{}) (interface{}, error)) func(*[]byte, *rt.GoType, *unsafe.Pointer, *vars.Stack, uint64) error { +// return func(buf *[]byte, vt *rt.GoType, vp *unsafe.Pointer, sb *vars.Stack, fv uint64) error { +// if vt == nil { +// return EncodeNil(buf) +// } else if fn, err := vars.FindOrCompile(vt, (fv&(1<<BitPointerValue)) != 0, computor); err != nil { +// return err +// } else if vt.Indirect() { +// err := fn(buf, *vp, sb, fv) +// return err +// } else { +// err := fn(buf, unsafe.Pointer(vp), sb, fv) +// return err +// } +// } +// } + +func EncodeJsonMarshaler(buf *[]byte, val json.Marshaler, opt uint64) error { + if ret, err := val.MarshalJSON(); err != nil { + return err + } else { + if opt&(1<<alg.BitCompactMarshaler) != 0 { + return Compact(buf, ret) + } + if opt&(1<<alg.BitNoValidateJSONMarshaler) == 0 { + if ok, s := alg.Valid(ret); !ok { + return vars.Error_marshaler(ret, s) + } + } + *buf = append(*buf, ret...) + return nil + } +} + +func EncodeTextMarshaler(buf *[]byte, val encoding.TextMarshaler, opt uint64) error { + if ret, err := val.MarshalText(); err != nil { + return err + } else { + if opt&(1<<alg.BitNoQuoteTextMarshaler) != 0 { + *buf = append(*buf, ret...) + return nil + } + *buf = alg.Quote(*buf, rt.Mem2Str(ret), false) + return nil + } +} + +func IsZero(val unsafe.Pointer, fv *resolver.FieldMeta) bool { + rv := reflect.NewAt(fv.Type, val).Elem() + b1 := fv.IsZero == nil && rv.IsZero() + b2 := fv.IsZero != nil && fv.IsZero(rv) + return b1 || b2 +} |
