aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go')
-rw-r--r--vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go40
1 files changed, 34 insertions, 6 deletions
diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go b/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go
index 59de673..a633ed5 100644
--- a/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go
+++ b/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go
@@ -35,8 +35,12 @@ type Pagination struct {
35 // NewRequest should always be built from the same API operations. It is 35 // NewRequest should always be built from the same API operations. It is
36 // undefined if different API operations are returned on subsequent calls. 36 // undefined if different API operations are returned on subsequent calls.
37 NewRequest func() (*Request, error) 37 NewRequest func() (*Request, error)
38 // EndPageOnSameToken, when enabled, will allow the paginator to stop on
39 // token that are the same as its previous tokens.
40 EndPageOnSameToken bool
38 41
39 started bool 42 started bool
43 prevTokens []interface{}
40 nextTokens []interface{} 44 nextTokens []interface{}
41 45
42 err error 46 err error
@@ -49,7 +53,15 @@ type Pagination struct {
49// 53//
50// Will always return true if Next has not been called yet. 54// Will always return true if Next has not been called yet.
51func (p *Pagination) HasNextPage() bool { 55func (p *Pagination) HasNextPage() bool {
52 return !(p.started && len(p.nextTokens) == 0) 56 if !p.started {
57 return true
58 }
59
60 hasNextPage := len(p.nextTokens) != 0
61 if p.EndPageOnSameToken {
62 return hasNextPage && !awsutil.DeepEqual(p.nextTokens, p.prevTokens)
63 }
64 return hasNextPage
53} 65}
54 66
55// Err returns the error Pagination encountered when retrieving the next page. 67// Err returns the error Pagination encountered when retrieving the next page.
@@ -96,6 +108,7 @@ func (p *Pagination) Next() bool {
96 return false 108 return false
97 } 109 }
98 110
111 p.prevTokens = p.nextTokens
99 p.nextTokens = req.nextPageTokens() 112 p.nextTokens = req.nextPageTokens()
100 p.curPage = req.Data 113 p.curPage = req.Data
101 114
@@ -142,13 +155,28 @@ func (r *Request) nextPageTokens() []interface{} {
142 tokens := []interface{}{} 155 tokens := []interface{}{}
143 tokenAdded := false 156 tokenAdded := false
144 for _, outToken := range r.Operation.OutputTokens { 157 for _, outToken := range r.Operation.OutputTokens {
145 v, _ := awsutil.ValuesAtPath(r.Data, outToken) 158 vs, _ := awsutil.ValuesAtPath(r.Data, outToken)
146 if len(v) > 0 { 159 if len(vs) == 0 {
147 tokens = append(tokens, v[0])
148 tokenAdded = true
149 } else {
150 tokens = append(tokens, nil) 160 tokens = append(tokens, nil)
161 continue
162 }
163 v := vs[0]
164
165 switch tv := v.(type) {
166 case *string:
167 if len(aws.StringValue(tv)) == 0 {
168 tokens = append(tokens, nil)
169 continue
170 }
171 case string:
172 if len(tv) == 0 {
173 tokens = append(tokens, nil)
174 continue
175 }
151 } 176 }
177
178 tokenAdded = true
179 tokens = append(tokens, v)
152 } 180 }
153 if !tokenAdded { 181 if !tokenAdded {
154 return nil 182 return nil