aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/goccy/go-json/internal/decoder/bool.go
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-06-24 14:30:25 +0200
committerTaras Madan <tarasmadan@google.com>2024-07-05 07:51:41 +0000
commit5145b76b8a41b71a7b3c06373959c12f3a22014b (patch)
treed87c1ca1d0979767cc07ace6c0a616ec311a8fc6 /vendor/github.com/goccy/go-json/internal/decoder/bool.go
parent7d7fe8807550c6e02def380d335ae0230f1e495c (diff)
vendor: add bigquery client library
Diffstat (limited to 'vendor/github.com/goccy/go-json/internal/decoder/bool.go')
-rw-r--r--vendor/github.com/goccy/go-json/internal/decoder/bool.go83
1 files changed, 83 insertions, 0 deletions
diff --git a/vendor/github.com/goccy/go-json/internal/decoder/bool.go b/vendor/github.com/goccy/go-json/internal/decoder/bool.go
new file mode 100644
index 000000000..ba6cf5bc4
--- /dev/null
+++ b/vendor/github.com/goccy/go-json/internal/decoder/bool.go
@@ -0,0 +1,83 @@
+package decoder
+
+import (
+ "fmt"
+ "unsafe"
+
+ "github.com/goccy/go-json/internal/errors"
+)
+
+type boolDecoder struct {
+ structName string
+ fieldName string
+}
+
+func newBoolDecoder(structName, fieldName string) *boolDecoder {
+ return &boolDecoder{structName: structName, fieldName: fieldName}
+}
+
+func (d *boolDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {
+ c := s.skipWhiteSpace()
+ for {
+ switch c {
+ case 't':
+ if err := trueBytes(s); err != nil {
+ return err
+ }
+ **(**bool)(unsafe.Pointer(&p)) = true
+ return nil
+ case 'f':
+ if err := falseBytes(s); err != nil {
+ return err
+ }
+ **(**bool)(unsafe.Pointer(&p)) = false
+ return nil
+ case 'n':
+ if err := nullBytes(s); err != nil {
+ return err
+ }
+ return nil
+ case nul:
+ if s.read() {
+ c = s.char()
+ continue
+ }
+ goto ERROR
+ }
+ break
+ }
+ERROR:
+ return errors.ErrUnexpectedEndOfJSON("bool", s.totalOffset())
+}
+
+func (d *boolDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {
+ buf := ctx.Buf
+ cursor = skipWhiteSpace(buf, cursor)
+ switch buf[cursor] {
+ case 't':
+ if err := validateTrue(buf, cursor); err != nil {
+ return 0, err
+ }
+ cursor += 4
+ **(**bool)(unsafe.Pointer(&p)) = true
+ return cursor, nil
+ case 'f':
+ if err := validateFalse(buf, cursor); err != nil {
+ return 0, err
+ }
+ cursor += 5
+ **(**bool)(unsafe.Pointer(&p)) = false
+ return cursor, nil
+ case 'n':
+ if err := validateNull(buf, cursor); err != nil {
+ return 0, err
+ }
+ cursor += 4
+ return cursor, nil
+ }
+ return 0, errors.ErrUnexpectedEndOfJSON("bool", cursor)
+}
+
+func (d *boolDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {
+ return nil, 0, fmt.Errorf("json: bool decoder does not support decode path")
+}