func (buf *RowBuffer) AddRow(r interface{}) error {
	if !reflect.TypeOf(r).Implements(reflect.TypeOf((*row.Annotatable)(nil)).Elem()) {
		log.Println(reflect.TypeOf(r), "not Annotatable")
		return ErrNotAnnotatable
	}
	for len(buf.rows) > buf.bufferSize-1 {
		return etl.ErrBufferFull
	}
	buf.rows = append(buf.rows, r)
	return nil
}
AddRow simply inserts a row into the buffer.  Returns error if buffer is full.
Not thread-safe.  Should only be called by owning thread.
package parser
import (
	"context"
	"errors"
	"log"
	"reflect"
	"time"
	"github.com/prometheus/client_golang/prometheus"
	v2as "github.com/m-lab/annotation-service/api/v2"
	"github.com/m-lab/etl/etl"
	"github.com/m-lab/etl/metrics"
	"github.com/m-lab/etl/row"
)
var (
	ErrAnnotationError = errors.New("Annotation error")
	ErrNotAnnotatable  = errors.New("object does not implement Annotatable")
	ErrRowNotPointer   = errors.New("Row should be a pointer type")
)
type RowBuffer struct {
	bufferSize int
	rows       []interface{}  
	ann        v2as.Annotator
}