src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

handwritten_paginators.go (3548B)


      1 package route53
      2 
      3 import (
      4 	"context"
      5 	"fmt"
      6 	"github.com/aws/aws-sdk-go-v2/service/route53/types"
      7 )
      8 
      9 // ListResourceRecordSetsAPIClient is a client that implements the ListResourceRecordSets
     10 // operation
     11 type ListResourceRecordSetsAPIClient interface {
     12 	ListResourceRecordSets(context.Context, *ListResourceRecordSetsInput, ...func(*Options)) (*ListResourceRecordSetsOutput, error)
     13 }
     14 
     15 var _ ListResourceRecordSetsAPIClient = (*Client)(nil)
     16 
     17 // ListResourceRecordSetsPaginatorOptions is the paginator options for ListResourceRecordSets
     18 type ListResourceRecordSetsPaginatorOptions struct {
     19 	// (Optional) The maximum number of ResourceRecordSets that you want Amazon Route 53 to
     20 	// return.
     21 	Limit int32
     22 
     23 	// Set to true if pagination should stop if the service returns a pagination token
     24 	// that matches the most recent token provided to the service.
     25 	StopOnDuplicateToken bool
     26 }
     27 
     28 // ListResourceRecordSetsPaginator is a paginator for ListResourceRecordSets
     29 type ListResourceRecordSetsPaginator struct {
     30 	options               ListResourceRecordSetsPaginatorOptions
     31 	client                ListResourceRecordSetsAPIClient
     32 	params                *ListResourceRecordSetsInput
     33 	firstPage             bool
     34 	startRecordName       *string
     35 	startRecordType       types.RRType
     36 	startRecordIdentifier *string
     37 	isTruncated           bool
     38 }
     39 
     40 // NewListResourceRecordSetsPaginator returns a new ListResourceRecordSetsPaginator
     41 func NewListResourceRecordSetsPaginator(client ListResourceRecordSetsAPIClient, params *ListResourceRecordSetsInput, optFns ...func(*ListResourceRecordSetsPaginatorOptions)) *ListResourceRecordSetsPaginator {
     42 	if params == nil {
     43 		params = &ListResourceRecordSetsInput{}
     44 	}
     45 
     46 	options := ListResourceRecordSetsPaginatorOptions{}
     47 	if params.MaxItems != nil {
     48 		options.Limit = *params.MaxItems
     49 	}
     50 
     51 	for _, fn := range optFns {
     52 		fn(&options)
     53 	}
     54 
     55 	return &ListResourceRecordSetsPaginator{
     56 		options:               options,
     57 		client:                client,
     58 		params:                params,
     59 		firstPage:             true,
     60 		startRecordName:       params.StartRecordName,
     61 		startRecordType:       params.StartRecordType,
     62 		startRecordIdentifier: params.StartRecordIdentifier,
     63 	}
     64 }
     65 
     66 // HasMorePages returns a boolean indicating whether more pages are available
     67 func (p *ListResourceRecordSetsPaginator) HasMorePages() bool {
     68 	return p.firstPage || p.isTruncated
     69 }
     70 
     71 // NextPage retrieves the next ListResourceRecordSets page.
     72 func (p *ListResourceRecordSetsPaginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*ListResourceRecordSetsOutput, error) {
     73 	if !p.HasMorePages() {
     74 		return nil, fmt.Errorf("no more pages available")
     75 	}
     76 
     77 	params := *p.params
     78 	params.StartRecordName = p.startRecordName
     79 	params.StartRecordIdentifier = p.startRecordIdentifier
     80 	params.StartRecordType = p.startRecordType
     81 
     82 	var limit *int32
     83 	if p.options.Limit > 0 {
     84 		limit = &p.options.Limit
     85 	}
     86 	params.MaxItems = limit
     87 
     88 	result, err := p.client.ListResourceRecordSets(ctx, &params, optFns...)
     89 	if err != nil {
     90 		return nil, err
     91 	}
     92 	p.firstPage = false
     93 
     94 	prevToken := p.startRecordName
     95 	p.isTruncated = result.IsTruncated
     96 	p.startRecordName = nil
     97 	p.startRecordIdentifier = nil
     98 	p.startRecordType = ""
     99 	if result.IsTruncated {
    100 		p.startRecordName = result.NextRecordName
    101 		p.startRecordIdentifier = result.NextRecordIdentifier
    102 		p.startRecordType = result.NextRecordType
    103 	}
    104 
    105 	if p.options.StopOnDuplicateToken &&
    106 		prevToken != nil &&
    107 		p.startRecordName != nil &&
    108 		*prevToken == *p.startRecordName {
    109 		p.isTruncated = false
    110 	}
    111 
    112 	return result, nil
    113 }