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

import Foundation public struct ListPartsPaginator: AsyncSequence { public typealias Element = ListPartsResult let client: Client let request: ListPartsRequest public init( client: Client, request: ListPartsRequest, options: PaginatorOptions? = nil ) { var request = request if let limit = options?.limit { request.maxParts = limit } self.client = client self.request = request } public struct AsyncIterator: AsyncIteratorProtocol { let sequence: ListPartsPaginator var request: ListPartsRequest? init(sequence: ListPartsPaginator) { self.sequence = sequence request = sequence.request } public mutating func next() async throws -> ListPartsResult? { if let request = request { let result = try await sequence.client.listParts(request) // has next page if result.isTruncated ?? false { self.request?.partNumberMarker = result.nextPartNumberMarker } else { self.request = nil } return result } return nil } } public func makeAsyncIterator() -> AsyncIterator { AsyncIterator(sequence: self) } }