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
}
}