Documentation ¶
Overview ¶
Package pagination provides a ways to iterate over collections. For that purposes, it defines iterators and paginators, which act as an abstraction over the process of iterating over an entire result set of a truncated API operation returning pages.
Index ¶
- type AbstractPaginator
- func (a *AbstractPaginator) Close() error
- func (a *AbstractPaginator) FetchCurrentPage() (page IStaticPage, err error)
- func (a *AbstractPaginator) FetchCurrentPageIterator() (it IIterator, err error)
- func (a *AbstractPaginator) FetchNextPage(ctx context.Context, currentPage IStaticPage) (IStaticPage, error)
- func (a *AbstractPaginator) GetContext() context.Context
- func (a *AbstractPaginator) GetNext() (item interface{}, err error)
- func (a *AbstractPaginator) HasNext() bool
- func (a *AbstractPaginator) SetCurrentPage(page IStaticPage) (err error)
- func (a *AbstractPaginator) Stop() context.CancelFunc
- type AbstractStreamPaginator
- func (s *AbstractStreamPaginator) Close() error
- func (s *AbstractStreamPaginator) DryUp() error
- func (s *AbstractStreamPaginator) FetchFuturePage(ctx context.Context, currentPage IStaticPageStream) (IStaticPageStream, error)
- func (s *AbstractStreamPaginator) GetNext() (interface{}, error)
- func (s *AbstractStreamPaginator) HasNext() bool
- func (s *AbstractStreamPaginator) IsRunningDry() bool
- func (s *AbstractStreamPaginator) Stop() context.CancelFunc
- type DynamicPagePaginator
- type DynamicPageStreamPaginator
- type IGenericPaginator
- type IGenericStreamPaginator
- type IIterator
- type IPage
- type IPaginator
- type IPaginatorAndPageFetcher
- type IStaticPage
- type IStaticPageStream
- type IStream
- type IStreamPaginator
- type IStreamPaginatorAndPageFetcher
- type MockItem
- type MockPage
- func (m *MockPage) AppendItem(i *MockItem) error
- func (m *MockPage) GetFuture(ctx context.Context) (future IStream, err error)
- func (m *MockPage) GetItemCount() (int64, error)
- func (m *MockPage) GetItemIterator() (IIterator, error)
- func (m *MockPage) GetNext(ctx context.Context) (page IPage, err error)
- func (m *MockPage) HasFuture() bool
- func (m *MockPage) HasNext() bool
- func (m *MockPage) SetFuture(future IStream) error
- func (m *MockPage) SetIndexes(firstIndex int)
- func (m *MockPage) SetNext(next IStream) error
- type MockPageIterator
- type StaticPagePaginator
- type StaticPageStreamPaginator
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AbstractPaginator ¶
type AbstractPaginator struct {
// contains filtered or unexported fields
}
func NewAbstractPaginator ¶
func NewAbstractPaginator(ctx context.Context, firstPage IStaticPage, fetchNextFunc func(context.Context, IStaticPage) (IStaticPage, error)) (p *AbstractPaginator, err error)
func (*AbstractPaginator) Close ¶
func (a *AbstractPaginator) Close() error
func (*AbstractPaginator) FetchCurrentPage ¶ added in v1.23.0
func (a *AbstractPaginator) FetchCurrentPage() (page IStaticPage, err error)
func (*AbstractPaginator) FetchCurrentPageIterator ¶ added in v1.23.0
func (a *AbstractPaginator) FetchCurrentPageIterator() (it IIterator, err error)
func (*AbstractPaginator) FetchNextPage ¶ added in v1.23.0
func (a *AbstractPaginator) FetchNextPage(ctx context.Context, currentPage IStaticPage) (IStaticPage, error)
func (*AbstractPaginator) GetContext ¶
func (a *AbstractPaginator) GetContext() context.Context
func (*AbstractPaginator) GetNext ¶
func (a *AbstractPaginator) GetNext() (item interface{}, err error)
func (*AbstractPaginator) HasNext ¶
func (a *AbstractPaginator) HasNext() bool
func (*AbstractPaginator) SetCurrentPage ¶
func (a *AbstractPaginator) SetCurrentPage(page IStaticPage) (err error)
func (*AbstractPaginator) Stop ¶
func (a *AbstractPaginator) Stop() context.CancelFunc
type AbstractStreamPaginator ¶ added in v1.23.0
type AbstractStreamPaginator struct { AbstractPaginator // contains filtered or unexported fields }
func (*AbstractStreamPaginator) Close ¶ added in v1.23.0
func (s *AbstractStreamPaginator) Close() error
func (*AbstractStreamPaginator) DryUp ¶ added in v1.23.0
func (s *AbstractStreamPaginator) DryUp() error
func (*AbstractStreamPaginator) FetchFuturePage ¶ added in v1.23.0
func (s *AbstractStreamPaginator) FetchFuturePage(ctx context.Context, currentPage IStaticPageStream) (IStaticPageStream, error)
func (*AbstractStreamPaginator) GetNext ¶ added in v1.23.0
func (s *AbstractStreamPaginator) GetNext() (interface{}, error)
func (*AbstractStreamPaginator) HasNext ¶ added in v1.23.0
func (s *AbstractStreamPaginator) HasNext() bool
func (*AbstractStreamPaginator) IsRunningDry ¶ added in v1.23.0
func (s *AbstractStreamPaginator) IsRunningDry() bool
func (*AbstractStreamPaginator) Stop ¶ added in v1.23.0
func (s *AbstractStreamPaginator) Stop() context.CancelFunc
type DynamicPagePaginator ¶ added in v1.23.0
type DynamicPagePaginator struct {
AbstractPaginator
}
DynamicPagePaginator defines a paginator over dynamic pages i.e. pages from which it is possible to access the next one.
func (*DynamicPagePaginator) GetCurrentPage ¶ added in v1.23.0
func (d *DynamicPagePaginator) GetCurrentPage() (dynamicPage IPage, err error)
type DynamicPageStreamPaginator ¶ added in v1.23.0
type DynamicPageStreamPaginator struct {
AbstractStreamPaginator
}
DynamicPageStreamPaginator defines a paginator over a stream of dynamic pages i.e. pages from which it is possible to access the next one.
func (*DynamicPageStreamPaginator) GetCurrentPage ¶ added in v1.23.0
func (d *DynamicPageStreamPaginator) GetCurrentPage() (dynamicPage IPage, err error)
type IGenericPaginator ¶ added in v1.23.0
type IGenericPaginator interface { io.Closer IIterator // Stop returns a stop function which stops the iteration. Stop() context.CancelFunc }
IGenericPaginator defines a generic paginator.
type IGenericStreamPaginator ¶ added in v1.23.0
type IGenericStreamPaginator interface { IGenericPaginator // DryUp indicates to the stream that it will soon run out. DryUp() error // IsRunningDry indicates whether the stream is about to run out. IsRunningDry() bool }
IGenericStreamPaginator is an iterator over a stream. A stream is a collection without any know ending.
type IIterator ¶
type IIterator interface { // HasNext returns whether there are more items available or not. HasNext() bool // GetNext returns the next item. GetNext() (interface{}, error) }
IIterator defines an iterator over a collection of items.
func NewMockPageIterator ¶
type IPage ¶
type IPage interface { IStaticPage // GetNext returns the next page. GetNext(ctx context.Context) (IPage, error) }
IPage defines a page with the ability to access next pages.
type IPaginator ¶
type IPaginator interface { IGenericPaginator // GetCurrentPage returns the current page. GetCurrentPage() (IPage, error) }
IPaginator is an iterator over multiple pages
func NewCollectionPaginator ¶
func NewCollectionPaginator(ctx context.Context, fetchFirstPageFunc func(context.Context) (IPage, error)) (paginator IPaginator, err error)
NewCollectionPaginator creates a paginator over a collection of dynamic pages.
type IPaginatorAndPageFetcher ¶ added in v1.23.0
type IPaginatorAndPageFetcher interface { IGenericPaginator // GetCurrentPage returns the current page. GetCurrentPage() (IStaticPage, error) // FetchNextPage fetches the next page. FetchNextPage(ctx context.Context, currentPage IStaticPage) (IStaticPage, error) }
IPaginatorAndPageFetcher is a paginator dealing with static pages
func NewStaticPagePaginator ¶ added in v1.23.0
func NewStaticPagePaginator(ctx context.Context, fetchFirstPageFunc func(context.Context) (IStaticPage, error), fetchNextPageFunc func(context.Context, IStaticPage) (IStaticPage, error)) (paginator IPaginatorAndPageFetcher, err error)
NewStaticPagePaginator creates a paginator over a collection but only dealing with static pages i.e. pages from which it is not possible to access the next one and the paginator must define how to fetch them using the fetchNextPageFunc function.
type IStaticPage ¶ added in v1.23.0
type IStaticPage interface { // HasNext states whether more pages are accessible. HasNext() bool // GetItemIterator returns a new iterator over the page's items. GetItemIterator() (IIterator, error) // GetItemCount returns the number of items in this page GetItemCount() (int64, error) }
IStaticPage defines a generic page for a collection.
type IStaticPageStream ¶ added in v1.23.0
type IStaticPageStream interface { IStaticPage // HasFuture states whether there may be future items. HasFuture() bool }
IStaticPageStream defines a page for a collection which does not have any known ending.
type IStream ¶
type IStream interface { IPage IStaticPageStream // GetFuture returns the future page. GetFuture(ctx context.Context) (IStream, error) }
IStream defines a stream with the ability to access future pages.
func GenerateEmptyPage ¶
func GenerateEmptyPage() IStream
func GenerateMockCollection ¶
func GenerateMockPage ¶
func GenerateMockStream ¶
type IStreamPaginator ¶
type IStreamPaginator interface { IGenericStreamPaginator IPaginator }
IStreamPaginator is stream paginator over dynamic pages.
func NewStreamPaginator ¶
func NewStreamPaginator(ctx context.Context, runOutTimeOut, backoff time.Duration, fetchFirstPageFunc func(context.Context) (IStream, error)) (paginator IStreamPaginator, err error)
NewStreamPaginator creates a paginator over a stream of dynamic pages i.e. pages can access next and future pages. runOutTimeOut corresponds to the grace period between the stream being marked as running dry and the iteration actually ending backoff corresponds to the backoff time between page iteration.
type IStreamPaginatorAndPageFetcher ¶ added in v1.23.0
type IStreamPaginatorAndPageFetcher interface { IGenericStreamPaginator IPaginatorAndPageFetcher // FetchFuturePage returns the future page. FetchFuturePage(ctx context.Context, currentPage IStaticPageStream) (IStaticPageStream, error) }
IStreamPaginatorAndPageFetcher is a stream paginator over static pages.
func NewStaticPageStreamPaginator ¶ added in v1.23.0
func NewStaticPageStreamPaginator(ctx context.Context, runOutTimeOut, backoff time.Duration, fetchFirstPageFunc func(context.Context) (IStaticPageStream, error), fetchNextPageFunc func(context.Context, IStaticPage) (IStaticPage, error), fetchFutureFunc func(context.Context, IStaticPageStream) (IStaticPageStream, error)) (paginator IStreamPaginatorAndPageFetcher, err error)
NewStaticPageStreamPaginator creates a paginator over a stream but the pages are static i.e. they cannot access future and next pages from themselves. runOutTimeOut corresponds to the grace period between the stream being marked as running dry and the iteration actually ending backoff corresponds to the backoff time between page iteration.
type MockItem ¶
func GenerateMockItem ¶
func GenerateMockItem() *MockItem
type MockPage ¶
type MockPage struct {
// contains filtered or unexported fields
}
func (*MockPage) AppendItem ¶
func (*MockPage) GetItemCount ¶
func (*MockPage) GetItemIterator ¶
func (*MockPage) SetIndexes ¶
type MockPageIterator ¶
type MockPageIterator struct {
// contains filtered or unexported fields
}
func (*MockPageIterator) GetNext ¶
func (m *MockPageIterator) GetNext() (item interface{}, err error)
func (*MockPageIterator) HasNext ¶
func (m *MockPageIterator) HasNext() bool
type StaticPagePaginator ¶ added in v1.23.0
type StaticPagePaginator struct {
AbstractPaginator
}
StaticPagePaginator defines a paginator over static pages i.e. pages from which it is not possible to access the next one and the paginator must define how to fetch it.
func (*StaticPagePaginator) GetCurrentPage ¶ added in v1.23.0
func (d *StaticPagePaginator) GetCurrentPage() (IStaticPage, error)
type StaticPageStreamPaginator ¶ added in v1.23.0
type StaticPageStreamPaginator struct {
AbstractStreamPaginator
}
StaticPageStreamPaginator defines a paginator over a stream of static pages i.e. pages from which it is not possible to access the next nor the future pages.
func (*StaticPageStreamPaginator) GetCurrentPage ¶ added in v1.23.0
func (d *StaticPageStreamPaginator) GetCurrentPage() (IStaticPage, error)