3
0

Provide entry count

This commit is contained in:
Tomaž Jerman
2019-08-29 10:07:52 +02:00
parent a8b5e3b063
commit 986c69a812
4 changed files with 71 additions and 5 deletions
+26 -2
View File
@@ -2,6 +2,8 @@ package decoder
import (
"io"
"github.com/cortezaproject/corteza-server/pkg/count"
)
type (
@@ -17,12 +19,14 @@ type (
}
flatReader struct {
f io.ReadSeeker
r FlatReader
header []string
more bool
}
structuredDecoder struct {
f io.ReadSeeker
header []string
d StructuredDecoder
buf []map[string]interface{}
@@ -34,13 +38,27 @@ type (
)
// flat reader
func NewFlatReader(r FlatReader) *flatReader {
func NewFlatReader(r FlatReader, f io.ReadSeeker) *flatReader {
return &flatReader{
f: f,
r: r,
more: true,
}
}
func (dec *flatReader) EntryCount() (uint64, error) {
defer dec.f.Seek(0, 0)
c, err := count.Lines(dec.f)
if err != nil {
return 0, err
}
if c <= 0 {
return 0, nil
}
return c - 1, nil
}
func (dec *flatReader) get(fnc fdCallback) error {
v, err := dec.r.Read()
if err == io.EOF {
@@ -76,12 +94,18 @@ func (dec *flatReader) Header() []string {
}
// structured decoder
func NewStructuredDecoder(d StructuredDecoder) *structuredDecoder {
func NewStructuredDecoder(d StructuredDecoder, f io.ReadSeeker) *structuredDecoder {
return &structuredDecoder{
f: f,
d: d,
}
}
func (dec *structuredDecoder) EntryCount() (uint64, error) {
defer dec.f.Seek(0, 0)
return count.Lines(dec.f)
}
func (dec *structuredDecoder) get(fnc sdCallback) error {
if !dec.d.More() {
return nil