diff options
Diffstat (limited to 'vendor/github.com/uptrace/bun/dialect/pgdialect/stream_parser.go')
-rw-r--r-- | vendor/github.com/uptrace/bun/dialect/pgdialect/stream_parser.go | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/vendor/github.com/uptrace/bun/dialect/pgdialect/stream_parser.go b/vendor/github.com/uptrace/bun/dialect/pgdialect/stream_parser.go new file mode 100644 index 000000000..7b9a15f62 --- /dev/null +++ b/vendor/github.com/uptrace/bun/dialect/pgdialect/stream_parser.go @@ -0,0 +1,60 @@ +package pgdialect + +import ( + "fmt" + "io" +) + +type streamParser struct { + b []byte + i int + + buf []byte +} + +func newStreamParser(b []byte, start int) *streamParser { + return &streamParser{ + b: b, + i: start, + } +} + +func (p *streamParser) valid() bool { + return p.i < len(p.b) +} + +func (p *streamParser) skipByte(skip byte) error { + c, err := p.readByte() + if err != nil { + return err + } + if c == skip { + return nil + } + p.unreadByte() + return fmt.Errorf("got %q, wanted %q", c, skip) +} + +func (p *streamParser) readByte() (byte, error) { + if p.valid() { + c := p.b[p.i] + p.i++ + return c, nil + } + return 0, io.EOF +} + +func (p *streamParser) unreadByte() { + p.i-- +} + +func (p *streamParser) peek() byte { + if p.valid() { + return p.b[p.i] + } + return 0 +} + +func (p *streamParser) skipNext() { + p.i++ +} |