Sources/OSS/Paginator/ListObjectsV2Paginator.swift (41 lines of code) (raw):

import Foundation public struct ListObjectsV2Paginator: AsyncSequence { public typealias Element = ListObjectsV2Result let client: Client let request: ListObjectsV2Request public init( client: Client, request: ListObjectsV2Request, options: PaginatorOptions? = nil ) { var request = request if let limit = options?.limit { request.maxKeys = limit } self.client = client self.request = request } public struct AsyncIterator: AsyncIteratorProtocol { let sequence: ListObjectsV2Paginator var request: ListObjectsV2Request? init(sequence: ListObjectsV2Paginator) { self.sequence = sequence request = sequence.request } public mutating func next() async throws -> ListObjectsV2Result? { if let request = request { let result = try await sequence.client.listObjectsV2(request) // has next page if result.isTruncated ?? false { self.request?.continuationToken = result.nextContinuationToken } else { self.request = nil } return result } return nil } } public func makeAsyncIterator() -> AsyncIterator { AsyncIterator(sequence: self) } }