Sources/OSS/Paginator/ListMultipartUploadsPaginator.swift (42 lines of code) (raw):
import Foundation
public struct ListMultipartUploadsPaginator: AsyncSequence {
public typealias Element = ListMultipartUploadsResult
let client: Client
let request: ListMultipartUploadsRequest
public init(
client: Client,
request: ListMultipartUploadsRequest,
options: PaginatorOptions? = nil
) {
var request = request
if let limit = options?.limit {
request.maxUploads = limit
}
self.client = client
self.request = request
}
public struct AsyncIterator: AsyncIteratorProtocol {
let sequence: ListMultipartUploadsPaginator
var request: ListMultipartUploadsRequest?
init(sequence: ListMultipartUploadsPaginator) {
self.sequence = sequence
request = sequence.request
}
public mutating func next() async throws -> ListMultipartUploadsResult? {
if let request = request {
let result = try await sequence.client.listMultipartUploads(request)
// has next page
if result.isTruncated ?? false {
self.request?.uploadIdMarker = result.nextUploadIdMarker
self.request?.keyMarker = result.nextKeyMarker
} else {
self.request = nil
}
return result
}
return nil
}
}
public func makeAsyncIterator() -> AsyncIterator {
AsyncIterator(sequence: self)
}
}