diff options
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.go | 40 |
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. |
51 | func (p *Pagination) HasNextPage() bool { | 55 | func (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 |