1// Code generated by smithy-go-codegen DO NOT EDIT.
2
3package rds
4
5import (
6	"context"
7	"fmt"
8	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
9	"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
10	"github.com/aws/aws-sdk-go-v2/service/rds/types"
11	"github.com/aws/smithy-go/middleware"
12	smithyhttp "github.com/aws/smithy-go/transport/http"
13)
14
15// Lists available reserved DB instance offerings.
16func (c *Client) DescribeReservedDBInstancesOfferings(ctx context.Context, params *DescribeReservedDBInstancesOfferingsInput, optFns ...func(*Options)) (*DescribeReservedDBInstancesOfferingsOutput, error) {
17	if params == nil {
18		params = &DescribeReservedDBInstancesOfferingsInput{}
19	}
20
21	result, metadata, err := c.invokeOperation(ctx, "DescribeReservedDBInstancesOfferings", params, optFns, addOperationDescribeReservedDBInstancesOfferingsMiddlewares)
22	if err != nil {
23		return nil, err
24	}
25
26	out := result.(*DescribeReservedDBInstancesOfferingsOutput)
27	out.ResultMetadata = metadata
28	return out, nil
29}
30
31//
32type DescribeReservedDBInstancesOfferingsInput struct {
33
34	// The DB instance class filter value. Specify this parameter to show only the
35	// available offerings matching the specified DB instance class.
36	DBInstanceClass *string
37
38	// Duration filter value, specified in years or seconds. Specify this parameter to
39	// show only reservations for this duration. Valid Values: 1 | 3 | 31536000 |
40	// 94608000
41	Duration *string
42
43	// This parameter isn't currently supported.
44	Filters []types.Filter
45
46	// An optional pagination token provided by a previous request. If this parameter
47	// is specified, the response includes only records beyond the marker, up to the
48	// value specified by MaxRecords.
49	Marker *string
50
51	// The maximum number of records to include in the response. If more than the
52	// MaxRecords value is available, a pagination token called a marker is included in
53	// the response so you can retrieve the remaining results. Default: 100
54	// Constraints: Minimum 20, maximum 100.
55	MaxRecords *int32
56
57	// A value that indicates whether to show only those reservations that support
58	// Multi-AZ.
59	MultiAZ *bool
60
61	// The offering type filter value. Specify this parameter to show only the
62	// available offerings matching the specified offering type. Valid Values: "Partial
63	// Upfront" | "All Upfront" | "No Upfront"
64	OfferingType *string
65
66	// Product description filter value. Specify this parameter to show only the
67	// available offerings that contain the specified product description. The results
68	// show offerings that partially match the filter value.
69	ProductDescription *string
70
71	// The offering identifier filter value. Specify this parameter to show only the
72	// available offering that matches the specified reservation identifier. Example:
73	// 438012d3-4052-4cc7-b2e3-8d3372e0e706
74	ReservedDBInstancesOfferingId *string
75}
76
77// Contains the result of a successful invocation of the
78// DescribeReservedDBInstancesOfferings action.
79type DescribeReservedDBInstancesOfferingsOutput struct {
80
81	// An optional pagination token provided by a previous request. If this parameter
82	// is specified, the response includes only records beyond the marker, up to the
83	// value specified by MaxRecords.
84	Marker *string
85
86	// A list of reserved DB instance offerings.
87	ReservedDBInstancesOfferings []types.ReservedDBInstancesOffering
88
89	// Metadata pertaining to the operation's result.
90	ResultMetadata middleware.Metadata
91}
92
93func addOperationDescribeReservedDBInstancesOfferingsMiddlewares(stack *middleware.Stack, options Options) (err error) {
94	err = stack.Serialize.Add(&awsAwsquery_serializeOpDescribeReservedDBInstancesOfferings{}, middleware.After)
95	if err != nil {
96		return err
97	}
98	err = stack.Deserialize.Add(&awsAwsquery_deserializeOpDescribeReservedDBInstancesOfferings{}, middleware.After)
99	if err != nil {
100		return err
101	}
102	if err = addSetLoggerMiddleware(stack, options); err != nil {
103		return err
104	}
105	if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
106		return err
107	}
108	if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
109		return err
110	}
111	if err = addResolveEndpointMiddleware(stack, options); err != nil {
112		return err
113	}
114	if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
115		return err
116	}
117	if err = addRetryMiddlewares(stack, options); err != nil {
118		return err
119	}
120	if err = addHTTPSignerV4Middleware(stack, options); err != nil {
121		return err
122	}
123	if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
124		return err
125	}
126	if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
127		return err
128	}
129	if err = addClientUserAgent(stack); err != nil {
130		return err
131	}
132	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
133		return err
134	}
135	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
136		return err
137	}
138	if err = addOpDescribeReservedDBInstancesOfferingsValidationMiddleware(stack); err != nil {
139		return err
140	}
141	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opDescribeReservedDBInstancesOfferings(options.Region), middleware.Before); err != nil {
142		return err
143	}
144	if err = addRequestIDRetrieverMiddleware(stack); err != nil {
145		return err
146	}
147	if err = addResponseErrorMiddleware(stack); err != nil {
148		return err
149	}
150	if err = addRequestResponseLogging(stack, options); err != nil {
151		return err
152	}
153	return nil
154}
155
156// DescribeReservedDBInstancesOfferingsAPIClient is a client that implements the
157// DescribeReservedDBInstancesOfferings operation.
158type DescribeReservedDBInstancesOfferingsAPIClient interface {
159	DescribeReservedDBInstancesOfferings(context.Context, *DescribeReservedDBInstancesOfferingsInput, ...func(*Options)) (*DescribeReservedDBInstancesOfferingsOutput, error)
160}
161
162var _ DescribeReservedDBInstancesOfferingsAPIClient = (*Client)(nil)
163
164// DescribeReservedDBInstancesOfferingsPaginatorOptions is the paginator options
165// for DescribeReservedDBInstancesOfferings
166type DescribeReservedDBInstancesOfferingsPaginatorOptions struct {
167	// The maximum number of records to include in the response. If more than the
168	// MaxRecords value is available, a pagination token called a marker is included in
169	// the response so you can retrieve the remaining results. Default: 100
170	// Constraints: Minimum 20, maximum 100.
171	Limit int32
172
173	// Set to true if pagination should stop if the service returns a pagination token
174	// that matches the most recent token provided to the service.
175	StopOnDuplicateToken bool
176}
177
178// DescribeReservedDBInstancesOfferingsPaginator is a paginator for
179// DescribeReservedDBInstancesOfferings
180type DescribeReservedDBInstancesOfferingsPaginator struct {
181	options   DescribeReservedDBInstancesOfferingsPaginatorOptions
182	client    DescribeReservedDBInstancesOfferingsAPIClient
183	params    *DescribeReservedDBInstancesOfferingsInput
184	nextToken *string
185	firstPage bool
186}
187
188// NewDescribeReservedDBInstancesOfferingsPaginator returns a new
189// DescribeReservedDBInstancesOfferingsPaginator
190func NewDescribeReservedDBInstancesOfferingsPaginator(client DescribeReservedDBInstancesOfferingsAPIClient, params *DescribeReservedDBInstancesOfferingsInput, optFns ...func(*DescribeReservedDBInstancesOfferingsPaginatorOptions)) *DescribeReservedDBInstancesOfferingsPaginator {
191	if params == nil {
192		params = &DescribeReservedDBInstancesOfferingsInput{}
193	}
194
195	options := DescribeReservedDBInstancesOfferingsPaginatorOptions{}
196	if params.MaxRecords != nil {
197		options.Limit = *params.MaxRecords
198	}
199
200	for _, fn := range optFns {
201		fn(&options)
202	}
203
204	return &DescribeReservedDBInstancesOfferingsPaginator{
205		options:   options,
206		client:    client,
207		params:    params,
208		firstPage: true,
209	}
210}
211
212// HasMorePages returns a boolean indicating whether more pages are available
213func (p *DescribeReservedDBInstancesOfferingsPaginator) HasMorePages() bool {
214	return p.firstPage || p.nextToken != nil
215}
216
217// NextPage retrieves the next DescribeReservedDBInstancesOfferings page.
218func (p *DescribeReservedDBInstancesOfferingsPaginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*DescribeReservedDBInstancesOfferingsOutput, error) {
219	if !p.HasMorePages() {
220		return nil, fmt.Errorf("no more pages available")
221	}
222
223	params := *p.params
224	params.Marker = p.nextToken
225
226	var limit *int32
227	if p.options.Limit > 0 {
228		limit = &p.options.Limit
229	}
230	params.MaxRecords = limit
231
232	result, err := p.client.DescribeReservedDBInstancesOfferings(ctx, &params, optFns...)
233	if err != nil {
234		return nil, err
235	}
236	p.firstPage = false
237
238	prevToken := p.nextToken
239	p.nextToken = result.Marker
240
241	if p.options.StopOnDuplicateToken && prevToken != nil && p.nextToken != nil && *prevToken == *p.nextToken {
242		p.nextToken = nil
243	}
244
245	return result, nil
246}
247
248func newServiceMetadataMiddleware_opDescribeReservedDBInstancesOfferings(region string) *awsmiddleware.RegisterServiceMetadata {
249	return &awsmiddleware.RegisterServiceMetadata{
250		Region:        region,
251		ServiceID:     ServiceID,
252		SigningName:   "rds",
253		OperationName: "DescribeReservedDBInstancesOfferings",
254	}
255}
256