public IAsyncEnumerable <ValidationOverview> ListAsync(ValidationOverviewListingOptions options = null, CancellationToken cancellationToken = default)
 {
     return(AsyncEnumerableHelper
            .ToAsyncEnumerable <ValidationOverviewListSegment, ValidationOverview, ValidationOverviewListingOptions>(
                ListSegmentedAsync,
                ListSegmentedAsync,
                options,
                cancellationToken));
 }
        public async Task <ValidationOverviewListSegment> ListSegmentedAsync(ValidationOverviewListingOptions options = default, CancellationToken cancellationToken = default)
        {
            // Generate the additional parameters, where needed

            var restClient = _restClientFactory.Build();

            // Send the request to the Verifalia servers

            Dictionary <string, string> queryParams = null;

            if (options != null)
            {
                queryParams = new Dictionary <string, string>();

                if (options.Limit > 0)
                {
                    queryParams["limit"] = options.Limit.ToString(CultureInfo.InvariantCulture);
                }

                switch (options.OrderBy)
                {
                case ValidationOverviewListingField.CreatedOn:
                    queryParams["sort"] = $"{(options.Direction == Direction.Backward ? "-" : null)}createdOn";
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(options));
                }
            }

            using (var response = await restClient
                                  .InvokeAsync(HttpMethod.Get,
                                               "email-validations",
                                               queryParams: queryParams,
                                               headers: new Dictionary <string, object> {
                { "Accept", WellKnownMimeContentTypes.ApplicationJson }
            },
                                               cancellationToken: cancellationToken)
                                  .ConfigureAwait(false))
            {
                return(await ListSegmentedImplAsync(restClient, response, cancellationToken)
                       .ConfigureAwait(false));
            }
        }