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

import Foundation public struct ListObjectsPaginator: AsyncSequence { public typealias Element = ListObjectsResult let client: Client let request: ListObjectsRequest public init( client: Client, request: ListObjectsRequest, 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: ListObjectsPaginator var request: ListObjectsRequest? init(sequence: ListObjectsPaginator) { self.sequence = sequence request = sequence.request } public mutating func next() async throws -> ListObjectsResult? { if let request = request { let result = try await sequence.client.listObjects(request) // has next page if result.isTruncated ?? false { self.request?.marker = result.nextMarker } else { self.request = nil } return result } return nil } } public func makeAsyncIterator() -> AsyncIterator { AsyncIterator(sequence: self) } }