refactor: log parser names

This commit is contained in:
Inanc Gumus
2019-08-06 01:42:59 +03:00
parent 821a0cf260
commit 9ad46b14ce

View File

@ -3,25 +3,24 @@ package main
import "io" import "io"
type ( type (
parserFunc func(io.Reader) ([]result, error) retrieveFunc func(io.Reader) ([]result, error)
filterFunc func(result) bool filterFunc func(result) bool
groupFunc func(result) string groupFunc func(result) string
outputFunc func(io.Writer, []result) error writeFunc func(io.Writer, []result) error
) )
type report struct { type report struct {
input io.Reader input io.Reader
output io.Writer output io.Writer
parser parserFunc retrieve retrieveFunc
filterer filterFunc filter filterFunc
grouper groupFunc group groupFunc
outputter outputFunc write writeFunc
} }
func newReport() *report { func newReport() *report {
return &report{ return &report{
// parser: textParser, filter: noopFilter,
filterer: noopFilter,
} }
} }
@ -35,48 +34,48 @@ func (r *report) to(writer io.Writer) *report {
return r return r
} }
func (r *report) retrieveFrom(fn parserFunc) *report { func (r *report) retrieveFrom(fn retrieveFunc) *report {
r.parser = fn r.retrieve = fn
return r return r
} }
func (r *report) filterBy(fn filterFunc) *report { func (r *report) filterBy(fn filterFunc) *report {
r.filterer = fn r.filter = fn
return r return r
} }
func (r *report) groupBy(fn groupFunc) *report { func (r *report) groupBy(fn groupFunc) *report {
r.grouper = fn r.group = fn
return r return r
} }
func (r *report) writeTo(fn outputFunc) *report { func (r *report) writeTo(fn writeFunc) *report {
r.outputter = fn r.write = fn
return r return r
} }
func (r *report) run() ([]result, error) { func (r *report) run() ([]result, error) {
if r.parser == nil { if r.retrieve == nil {
panic("report retriever cannot be nil") panic("report retrieve cannot be nil")
} }
results, err := r.parser(r.input) results, err := r.retrieve(r.input)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// noop if filterer is nil // noop if filter is nil
results = filterBy(results, r.filterer) results = filterBy(results, r.filter)
// grouper is more tricky // group func is more tricky
// you don't want to create an unnecessary map // you don't want to create an unnecessary map
if r.grouper != nil { if r.group != nil {
results = groupBy(results, r.grouper) results = groupBy(results, r.group)
} }
// prefer: noop output // TODO: prefer: noop writer
if r.output != nil { if r.write != nil {
if err := r.outputter(r.output, results); err != nil { if err := r.write(r.output, results); err != nil {
return nil, err return nil, err
} }
} }