using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Amazon.Runtime { /// /// An enumerable containing all of the Result Keys for a paginator /// /// /// public class PaginatedResultKeyResponse : IPaginatedEnumerable { private readonly IPaginator _paginator; private readonly Func> _resultKeySelector; /// /// Create a PaginatedResultKeyResponse by providing any operation paginator /// and a selector function for the result key /// /// /// public PaginatedResultKeyResponse(IPaginator paginator, Func> resultKeySelector) { this._paginator = paginator; this._resultKeySelector = resultKeySelector; } #if AWS_ASYNC_ENUMERABLES_API /// /// Get the result keys asynchronously /// /// /// public async IAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) { await foreach (var parent in _paginator.PaginateAsync().WithCancellation(cancellationToken).ConfigureAwait(false)) { foreach (var resultKey in _resultKeySelector(parent)) { cancellationToken.ThrowIfCancellationRequested(); yield return resultKey; } } } #endif #if BCL /// /// Get the result keys synchronously /// /// public IEnumerator GetEnumerator() { foreach (var parent in _paginator.Paginate()) { foreach (var i in _resultKeySelector(parent)) { yield return i; } } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } #endif } }