github.com/rudderlabs/rudder-go-kit@v0.30.0/filemanager/iterator.go (about) 1 package filemanager 2 3 import "context" 4 5 // IterateFilesWithPrefix returns an iterator that can be used to iterate over all files with the given prefix. 6 func IterateFilesWithPrefix(ctx context.Context, prefix, startAfter string, maxItems int64, manager FileManager) *ObjectIterator { 7 it := &ObjectIterator{ 8 session: manager.ListFilesWithPrefix(ctx, startAfter, prefix, maxItems), 9 } 10 return it 11 } 12 13 // NewListIterator returns a new iterator for the given list session. 14 func NewListIterator(session ListSession) *ObjectIterator { 15 return &ObjectIterator{ 16 session: session, 17 } 18 } 19 20 type ObjectIterator struct { 21 session ListSession 22 23 item *FileInfo 24 items []*FileInfo 25 err error 26 } 27 28 func (it *ObjectIterator) Next() bool { 29 var err error 30 if len(it.items) == 0 { 31 it.items, err = it.session.Next() 32 if err != nil { 33 it.err = err 34 return false 35 } 36 } 37 38 if len(it.items) > 0 { 39 it.item = it.items[0] 40 it.items = it.items[1:] 41 return true 42 } 43 return false 44 } 45 46 func (it *ObjectIterator) Get() *FileInfo { 47 return it.item 48 } 49 50 func (it *ObjectIterator) Err() error { 51 return it.err 52 }