summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/dialect/pgdialect/stream_parser.go
blob: 7b9a15f625683903af690e034dc9d00e9c116fbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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++
}