1
2
3 package ecr
4
5 import (
6 "context"
7 "errors"
8 "fmt"
9 "github.com/aws/aws-sdk-go-v2/aws"
10 awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
11 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
12 internalauth "github.com/aws/aws-sdk-go-v2/internal/auth"
13 "github.com/aws/aws-sdk-go-v2/service/ecr/types"
14 smithyendpoints "github.com/aws/smithy-go/endpoints"
15 "github.com/aws/smithy-go/middleware"
16 smithyhttp "github.com/aws/smithy-go/transport/http"
17 )
18
19
20 func (c *Client) DescribePullThroughCacheRules(ctx context.Context, params *DescribePullThroughCacheRulesInput, optFns ...func(*Options)) (*DescribePullThroughCacheRulesOutput, error) {
21 if params == nil {
22 params = &DescribePullThroughCacheRulesInput{}
23 }
24
25 result, metadata, err := c.invokeOperation(ctx, "DescribePullThroughCacheRules", params, optFns, c.addOperationDescribePullThroughCacheRulesMiddlewares)
26 if err != nil {
27 return nil, err
28 }
29
30 out := result.(*DescribePullThroughCacheRulesOutput)
31 out.ResultMetadata = metadata
32 return out, nil
33 }
34
35 type DescribePullThroughCacheRulesInput struct {
36
37
38
39
40 EcrRepositoryPrefixes []string
41
42
43
44
45
46
47
48
49
50
51 MaxResults *int32
52
53
54
55
56
57
58 NextToken *string
59
60
61
62
63 RegistryId *string
64
65 noSmithyDocumentSerde
66 }
67
68 type DescribePullThroughCacheRulesOutput struct {
69
70
71
72
73
74 NextToken *string
75
76
77 PullThroughCacheRules []types.PullThroughCacheRule
78
79
80 ResultMetadata middleware.Metadata
81
82 noSmithyDocumentSerde
83 }
84
85 func (c *Client) addOperationDescribePullThroughCacheRulesMiddlewares(stack *middleware.Stack, options Options) (err error) {
86 err = stack.Serialize.Add(&awsAwsjson11_serializeOpDescribePullThroughCacheRules{}, middleware.After)
87 if err != nil {
88 return err
89 }
90 err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpDescribePullThroughCacheRules{}, middleware.After)
91 if err != nil {
92 return err
93 }
94 if err = addlegacyEndpointContextSetter(stack, options); err != nil {
95 return err
96 }
97 if err = addSetLoggerMiddleware(stack, options); err != nil {
98 return err
99 }
100 if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
101 return err
102 }
103 if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
104 return err
105 }
106 if err = addResolveEndpointMiddleware(stack, options); err != nil {
107 return err
108 }
109 if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
110 return err
111 }
112 if err = addRetryMiddlewares(stack, options); err != nil {
113 return err
114 }
115 if err = addHTTPSignerV4Middleware(stack, options); err != nil {
116 return err
117 }
118 if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
119 return err
120 }
121 if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
122 return err
123 }
124 if err = addClientUserAgent(stack, options); err != nil {
125 return err
126 }
127 if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
128 return err
129 }
130 if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
131 return err
132 }
133 if err = addDescribePullThroughCacheRulesResolveEndpointMiddleware(stack, options); err != nil {
134 return err
135 }
136 if err = stack.Initialize.Add(newServiceMetadataMiddleware_opDescribePullThroughCacheRules(options.Region), middleware.Before); err != nil {
137 return err
138 }
139 if err = awsmiddleware.AddRecursionDetection(stack); err != nil {
140 return err
141 }
142 if err = addRequestIDRetrieverMiddleware(stack); err != nil {
143 return err
144 }
145 if err = addResponseErrorMiddleware(stack); err != nil {
146 return err
147 }
148 if err = addRequestResponseLogging(stack, options); err != nil {
149 return err
150 }
151 if err = addendpointDisableHTTPSMiddleware(stack, options); err != nil {
152 return err
153 }
154 return nil
155 }
156
157
158
159 type DescribePullThroughCacheRulesAPIClient interface {
160 DescribePullThroughCacheRules(context.Context, *DescribePullThroughCacheRulesInput, ...func(*Options)) (*DescribePullThroughCacheRulesOutput, error)
161 }
162
163 var _ DescribePullThroughCacheRulesAPIClient = (*Client)(nil)
164
165
166
167 type DescribePullThroughCacheRulesPaginatorOptions struct {
168
169
170
171
172
173
174
175
176
177 Limit int32
178
179
180
181 StopOnDuplicateToken bool
182 }
183
184
185
186 type DescribePullThroughCacheRulesPaginator struct {
187 options DescribePullThroughCacheRulesPaginatorOptions
188 client DescribePullThroughCacheRulesAPIClient
189 params *DescribePullThroughCacheRulesInput
190 nextToken *string
191 firstPage bool
192 }
193
194
195
196 func NewDescribePullThroughCacheRulesPaginator(client DescribePullThroughCacheRulesAPIClient, params *DescribePullThroughCacheRulesInput, optFns ...func(*DescribePullThroughCacheRulesPaginatorOptions)) *DescribePullThroughCacheRulesPaginator {
197 if params == nil {
198 params = &DescribePullThroughCacheRulesInput{}
199 }
200
201 options := DescribePullThroughCacheRulesPaginatorOptions{}
202 if params.MaxResults != nil {
203 options.Limit = *params.MaxResults
204 }
205
206 for _, fn := range optFns {
207 fn(&options)
208 }
209
210 return &DescribePullThroughCacheRulesPaginator{
211 options: options,
212 client: client,
213 params: params,
214 firstPage: true,
215 nextToken: params.NextToken,
216 }
217 }
218
219
220 func (p *DescribePullThroughCacheRulesPaginator) HasMorePages() bool {
221 return p.firstPage || (p.nextToken != nil && len(*p.nextToken) != 0)
222 }
223
224
225 func (p *DescribePullThroughCacheRulesPaginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*DescribePullThroughCacheRulesOutput, error) {
226 if !p.HasMorePages() {
227 return nil, fmt.Errorf("no more pages available")
228 }
229
230 params := *p.params
231 params.NextToken = p.nextToken
232
233 var limit *int32
234 if p.options.Limit > 0 {
235 limit = &p.options.Limit
236 }
237 params.MaxResults = limit
238
239 result, err := p.client.DescribePullThroughCacheRules(ctx, ¶ms, optFns...)
240 if err != nil {
241 return nil, err
242 }
243 p.firstPage = false
244
245 prevToken := p.nextToken
246 p.nextToken = result.NextToken
247
248 if p.options.StopOnDuplicateToken &&
249 prevToken != nil &&
250 p.nextToken != nil &&
251 *prevToken == *p.nextToken {
252 p.nextToken = nil
253 }
254
255 return result, nil
256 }
257
258 func newServiceMetadataMiddleware_opDescribePullThroughCacheRules(region string) *awsmiddleware.RegisterServiceMetadata {
259 return &awsmiddleware.RegisterServiceMetadata{
260 Region: region,
261 ServiceID: ServiceID,
262 SigningName: "ecr",
263 OperationName: "DescribePullThroughCacheRules",
264 }
265 }
266
267 type opDescribePullThroughCacheRulesResolveEndpointMiddleware struct {
268 EndpointResolver EndpointResolverV2
269 BuiltInResolver builtInParameterResolver
270 }
271
272 func (*opDescribePullThroughCacheRulesResolveEndpointMiddleware) ID() string {
273 return "ResolveEndpointV2"
274 }
275
276 func (m *opDescribePullThroughCacheRulesResolveEndpointMiddleware) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) (
277 out middleware.SerializeOutput, metadata middleware.Metadata, err error,
278 ) {
279 if awsmiddleware.GetRequiresLegacyEndpoints(ctx) {
280 return next.HandleSerialize(ctx, in)
281 }
282
283 req, ok := in.Request.(*smithyhttp.Request)
284 if !ok {
285 return out, metadata, fmt.Errorf("unknown transport type %T", in.Request)
286 }
287
288 if m.EndpointResolver == nil {
289 return out, metadata, fmt.Errorf("expected endpoint resolver to not be nil")
290 }
291
292 params := EndpointParameters{}
293
294 m.BuiltInResolver.ResolveBuiltIns(¶ms)
295
296 var resolvedEndpoint smithyendpoints.Endpoint
297 resolvedEndpoint, err = m.EndpointResolver.ResolveEndpoint(ctx, params)
298 if err != nil {
299 return out, metadata, fmt.Errorf("failed to resolve service endpoint, %w", err)
300 }
301
302 req.URL = &resolvedEndpoint.URI
303
304 for k := range resolvedEndpoint.Headers {
305 req.Header.Set(
306 k,
307 resolvedEndpoint.Headers.Get(k),
308 )
309 }
310
311 authSchemes, err := internalauth.GetAuthenticationSchemes(&resolvedEndpoint.Properties)
312 if err != nil {
313 var nfe *internalauth.NoAuthenticationSchemesFoundError
314 if errors.As(err, &nfe) {
315
316 signingName := "ecr"
317 signingRegion := m.BuiltInResolver.(*builtInResolver).Region
318 ctx = awsmiddleware.SetSigningName(ctx, signingName)
319 ctx = awsmiddleware.SetSigningRegion(ctx, signingRegion)
320
321 }
322 var ue *internalauth.UnSupportedAuthenticationSchemeSpecifiedError
323 if errors.As(err, &ue) {
324 return out, metadata, fmt.Errorf(
325 "This operation requests signer version(s) %v but the client only supports %v",
326 ue.UnsupportedSchemes,
327 internalauth.SupportedSchemes,
328 )
329 }
330 }
331
332 for _, authScheme := range authSchemes {
333 switch authScheme.(type) {
334 case *internalauth.AuthenticationSchemeV4:
335 v4Scheme, _ := authScheme.(*internalauth.AuthenticationSchemeV4)
336 var signingName, signingRegion string
337 if v4Scheme.SigningName == nil {
338 signingName = "ecr"
339 } else {
340 signingName = *v4Scheme.SigningName
341 }
342 if v4Scheme.SigningRegion == nil {
343 signingRegion = m.BuiltInResolver.(*builtInResolver).Region
344 } else {
345 signingRegion = *v4Scheme.SigningRegion
346 }
347 if v4Scheme.DisableDoubleEncoding != nil {
348
349
350
351 ctx = internalauth.SetDisableDoubleEncoding(ctx, *v4Scheme.DisableDoubleEncoding)
352 }
353 ctx = awsmiddleware.SetSigningName(ctx, signingName)
354 ctx = awsmiddleware.SetSigningRegion(ctx, signingRegion)
355 break
356 case *internalauth.AuthenticationSchemeV4A:
357 v4aScheme, _ := authScheme.(*internalauth.AuthenticationSchemeV4A)
358 if v4aScheme.SigningName == nil {
359 v4aScheme.SigningName = aws.String("ecr")
360 }
361 if v4aScheme.DisableDoubleEncoding != nil {
362
363
364
365 ctx = internalauth.SetDisableDoubleEncoding(ctx, *v4aScheme.DisableDoubleEncoding)
366 }
367 ctx = awsmiddleware.SetSigningName(ctx, *v4aScheme.SigningName)
368 ctx = awsmiddleware.SetSigningRegion(ctx, v4aScheme.SigningRegionSet[0])
369 break
370 case *internalauth.AuthenticationSchemeNone:
371 break
372 }
373 }
374
375 return next.HandleSerialize(ctx, in)
376 }
377
378 func addDescribePullThroughCacheRulesResolveEndpointMiddleware(stack *middleware.Stack, options Options) error {
379 return stack.Serialize.Insert(&opDescribePullThroughCacheRulesResolveEndpointMiddleware{
380 EndpointResolver: options.EndpointResolverV2,
381 BuiltInResolver: &builtInResolver{
382 Region: options.Region,
383 UseDualStack: options.EndpointOptions.UseDualStackEndpoint,
384 UseFIPS: options.EndpointOptions.UseFIPSEndpoint,
385 Endpoint: options.BaseEndpoint,
386 },
387 }, "ResolveEndpoint", middleware.After)
388 }
389
View as plain text