summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/internal
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/internal')
-rw-r--r--vendor/github.com/uptrace/bun/internal/parser/parser.go50
-rw-r--r--vendor/github.com/uptrace/bun/internal/unsafe.go16
2 files changed, 48 insertions, 18 deletions
diff --git a/vendor/github.com/uptrace/bun/internal/parser/parser.go b/vendor/github.com/uptrace/bun/internal/parser/parser.go
index cdfc0be16..1f2704478 100644
--- a/vendor/github.com/uptrace/bun/internal/parser/parser.go
+++ b/vendor/github.com/uptrace/bun/internal/parser/parser.go
@@ -2,6 +2,8 @@ package parser
import (
"bytes"
+ "fmt"
+ "io"
"strconv"
"github.com/uptrace/bun/internal"
@@ -22,23 +24,43 @@ func NewString(s string) *Parser {
return New(internal.Bytes(s))
}
+func (p *Parser) Reset(b []byte) {
+ p.b = b
+ p.i = 0
+}
+
func (p *Parser) Valid() bool {
return p.i < len(p.b)
}
-func (p *Parser) Bytes() []byte {
+func (p *Parser) Remaining() []byte {
return p.b[p.i:]
}
+func (p *Parser) ReadByte() (byte, error) {
+ if p.Valid() {
+ ch := p.b[p.i]
+ p.Advance()
+ return ch, nil
+ }
+ return 0, io.ErrUnexpectedEOF
+}
+
func (p *Parser) Read() byte {
if p.Valid() {
- c := p.b[p.i]
+ ch := p.b[p.i]
p.Advance()
- return c
+ return ch
}
return 0
}
+func (p *Parser) Unread() {
+ if p.i > 0 {
+ p.i--
+ }
+}
+
func (p *Parser) Peek() byte {
if p.Valid() {
return p.b[p.i]
@@ -50,19 +72,25 @@ func (p *Parser) Advance() {
p.i++
}
-func (p *Parser) Skip(skip byte) bool {
- if p.Peek() == skip {
+func (p *Parser) Skip(skip byte) error {
+ ch := p.Peek()
+ if ch == skip {
p.Advance()
- return true
+ return nil
}
- return false
+ return fmt.Errorf("got %q, wanted %q", ch, skip)
}
-func (p *Parser) SkipBytes(skip []byte) bool {
- if len(skip) > len(p.b[p.i:]) {
- return false
+func (p *Parser) SkipPrefix(skip []byte) error {
+ if !bytes.HasPrefix(p.b[p.i:], skip) {
+ return fmt.Errorf("got %q, wanted prefix %q", p.b, skip)
}
- if !bytes.Equal(p.b[p.i:p.i+len(skip)], skip) {
+ p.i += len(skip)
+ return nil
+}
+
+func (p *Parser) CutPrefix(skip []byte) bool {
+ if !bytes.HasPrefix(p.b[p.i:], skip) {
return false
}
p.i += len(skip)
diff --git a/vendor/github.com/uptrace/bun/internal/unsafe.go b/vendor/github.com/uptrace/bun/internal/unsafe.go
index 4bc79701f..1a0331297 100644
--- a/vendor/github.com/uptrace/bun/internal/unsafe.go
+++ b/vendor/github.com/uptrace/bun/internal/unsafe.go
@@ -1,3 +1,4 @@
+//go:build !appengine
// +build !appengine
package internal
@@ -6,15 +7,16 @@ import "unsafe"
// String converts byte slice to string.
func String(b []byte) string {
- return *(*string)(unsafe.Pointer(&b))
+ if len(b) == 0 {
+ return ""
+ }
+ return unsafe.String(&b[0], len(b))
}
// Bytes converts string to byte slice.
func Bytes(s string) []byte {
- return *(*[]byte)(unsafe.Pointer(
- &struct {
- string
- Cap int
- }{s, len(s)},
- ))
+ if s == "" {
+ return []byte{}
+ }
+ return unsafe.Slice(unsafe.StringData(s), len(s))
}