Open
Description
ACH Version
1.18
What were you trying to do?
I am trying to adapt the reader implementation to allow for a streamed approach that could keep from having a whole file in memory at once. The use case is that in large-volume applications with a service-based architecture reading a whole file into memory at once may not be possible. This would make some validations impossible of course and that is a trade-off consumers would need to make.
What did you expect to see?
// new signature proposed
func (r *Reader) Stream(ctx context.Context) (chan interface{}, <-chan error) { ... }
// Usage sample:
achReader := moov_ach.NewReader(reader)
opts := &moov_ach.ValidateOpts{
// ...
}
achReader.SetValidation(opts)
fileRecords, errs := Stream(ctx)
var moreRecord, moreErr bool = true, true
var record interface{}
var err error
select {
case record, moreRecord = <-fileRecords:
if header, ok := record.(moov_ach.FileHeader); ok {
// handle header
} else if batchHeader, ok := record.(moov_ach.BatchHeader); ok {
// handle batch header
} else if entry, ok := record.(moov_ach.EntryDetail); ok {
// handle entry record
} else if record, ok := record.(moov_ach.RecordType); ok {
// handle other records
}
case err, moreErr = <-errs:
// process err
case <-ctx.Done():
return ctx.Err()
}
Activity