forked from influxdata/influxdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
string_iterator_reader.go
63 lines (49 loc) · 1.23 KB
/
string_iterator_reader.go
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
61
62
63
package reads
import (
"github.com/influxdata/influxdb/storage/reads/datatypes"
"github.com/influxdata/influxdb/tsdb/cursors"
)
type StringValuesStreamReader interface {
Recv() (*datatypes.StringValuesResponse, error)
}
type StringIteratorStreamReader struct {
stream StringValuesStreamReader
response *datatypes.StringValuesResponse
i int
err error
}
// API compatibility
var _ cursors.StringIterator = (*StringIteratorStreamReader)(nil)
func NewStringIteratorStreamReader(stream StringValuesStreamReader) *StringIteratorStreamReader {
return &StringIteratorStreamReader{
stream: stream,
}
}
func (r *StringIteratorStreamReader) Err() error {
return r.err
}
func (r *StringIteratorStreamReader) Next() bool {
if r.err != nil {
return false
}
if r.response == nil || len(r.response.Values)-1 <= r.i {
r.response, r.err = r.stream.Recv()
if r.err != nil {
return false
}
r.i = 0
} else {
r.i++
}
return len(r.response.Values) > r.i
}
func (r *StringIteratorStreamReader) Value() string {
if len(r.response.Values) > r.i {
return string(r.response.Values[r.i])
}
// Better than panic.
return ""
}
func (r *StringIteratorStreamReader) Stats() cursors.CursorStats {
return cursors.CursorStats{}
}