/
pagination.go
44 lines (36 loc) · 1.67 KB
/
pagination.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
* Copyright (C) 2020-2023 Arm Limited or its affiliates and Contributors. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
package messages
import (
"context"
"time"
"github.com/ARM-software/golang-utils/utils/collection/pagination"
)
type PaginatorFactory struct {
backOffPeriod time.Duration
runOutTimeout time.Duration
fetchNextPageFunc func(context.Context, pagination.IStaticPage) (pagination.IStaticPage, error)
fetchFutureFunc func(context.Context, pagination.IStaticPageStream) (pagination.IStaticPageStream, error)
}
func (f *PaginatorFactory) Create(ctx context.Context, fetchFirstPageFunc func(context.Context) (pagination.IStaticPageStream, error)) (paginator pagination.IStreamPaginatorAndPageFetcher, err error) {
return pagination.NewStaticPageStreamPaginator(ctx, f.runOutTimeout, f.backOffPeriod, fetchFirstPageFunc, f.fetchNextPageFunc, f.fetchFutureFunc)
}
func (f *PaginatorFactory) UpdateRunOutTimeout(runOutTimeOut time.Duration) *PaginatorFactory {
f.runOutTimeout = runOutTimeOut
return f
}
func (f *PaginatorFactory) UpdatBackOffPeriod(backoff time.Duration) *PaginatorFactory {
f.backOffPeriod = backoff
return f
}
// NewPaginatorFactory returns a message paginator factory.
func NewPaginatorFactory(runOutTimeOut, backoff time.Duration, fetchNextPageFunc func(context.Context, pagination.IStaticPage) (pagination.IStaticPage, error), fetchFutureFunc func(context.Context, pagination.IStaticPageStream) (pagination.IStaticPageStream, error)) *PaginatorFactory {
return &PaginatorFactory{
backOffPeriod: backoff,
runOutTimeout: runOutTimeOut,
fetchNextPageFunc: fetchNextPageFunc,
fetchFutureFunc: fetchFutureFunc,
}
}