2020-05-20 19:59:11 +01:00
|
|
|
using System.Threading;
|
2020-05-05 04:26:37 +01:00
|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using SpotifyAPI.Web.Http;
|
|
|
|
|
|
|
|
namespace SpotifyAPI.Web
|
|
|
|
{
|
2020-05-30 22:20:42 +01:00
|
|
|
/// <summary>
|
|
|
|
/// A paginator allows to cycle through all resources of the spotify API
|
|
|
|
/// </summary>
|
2020-05-05 04:26:37 +01:00
|
|
|
public interface IPaginator
|
|
|
|
{
|
2020-05-30 22:20:42 +01:00
|
|
|
/// <summary>
|
|
|
|
/// Fetches all pages and returns them grouped in a list
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="firstPage">The first page. Will be included in the result list!</param>
|
|
|
|
/// <param name="connector">An API Connector to make requests to spotify</param>
|
|
|
|
/// <typeparam name="T">Paging Type</typeparam>
|
|
|
|
/// <returns>A list containing all pages, including the firstPage</returns>
|
|
|
|
Task<IList<T>> PaginateAll<T>(Paging<T> firstPage, IAPIConnector connector);
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Fetches all pages and returns them grouped in a list.
|
|
|
|
/// Supports a mapping method which takes care of JSON mapping problems.
|
|
|
|
/// To give an example, the Search method always returns the paging objects nested in a key. The mapper functions
|
|
|
|
/// tells the paginate function where to find the actual paging object in the response.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="firstPage">The first page. Will be included in the result list!</param>
|
|
|
|
/// <param name="mapper">A function which returns the actual paging object in another response object</param>
|
|
|
|
/// <param name="connector">An API Connector to make requests to spotify</param>
|
|
|
|
/// <typeparam name="T">Paging Type</typeparam>
|
|
|
|
/// <typeparam name="TNext">Outer response Type</typeparam>
|
|
|
|
/// <returns>A list containing all pages, including the firstPage</returns>
|
|
|
|
Task<IList<T>> PaginateAll<T, TNext>(
|
2020-05-20 19:59:11 +01:00
|
|
|
Paging<T, TNext> firstPage,
|
|
|
|
Func<TNext, Paging<T, TNext>> mapper,
|
|
|
|
IAPIConnector connector
|
|
|
|
);
|
2020-05-05 16:52:23 +01:00
|
|
|
|
2020-05-20 19:59:11 +01:00
|
|
|
#if NETSTANDARD2_1
|
2020-05-30 22:20:42 +01:00
|
|
|
/// <summary>
|
|
|
|
/// Fetches all pages and returns one by one using IAsyncEnumerable
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="firstPage">The first page. Will be included in the result list!</param>
|
|
|
|
/// <param name="connector">An API Connector to make requests to spotify</param>
|
|
|
|
/// <param name="cancel">A CancellationToken</param>
|
|
|
|
/// <typeparam name="T">Paging Type</typeparam>
|
|
|
|
/// <returns></returns>
|
2020-05-20 19:59:11 +01:00
|
|
|
IAsyncEnumerable<T> Paginate<T>(Paging<T> firstPage, IAPIConnector connector, CancellationToken cancel = default);
|
2020-05-30 22:20:42 +01:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Fetches all pages and returns them grouped in a list.
|
|
|
|
/// Supports a mapping method which takes care of JSON mapping problems.
|
|
|
|
/// To give an example, the Search method always returns the paging objects nested in a key. The mapper functions
|
|
|
|
/// tells the paginate function where to find the actual paging object in the response.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="firstPage">The first page. Will be included in the result list!</param>
|
|
|
|
/// <param name="mapper">A function which returns the actual paging object in another response object</param>
|
|
|
|
/// <param name="connector">An API Connector to make requests to spotify</param>
|
|
|
|
/// <param name="cancel">A CancellationToken</param>
|
|
|
|
/// <typeparam name="T">Paging Type</typeparam>
|
|
|
|
/// <typeparam name="TNext">Outer response Type</typeparam>
|
|
|
|
/// <returns></returns>
|
2020-05-20 19:59:11 +01:00
|
|
|
IAsyncEnumerable<T> Paginate<T, TNext>(
|
|
|
|
Paging<T, TNext> firstPage,
|
|
|
|
Func<TNext, Paging<T, TNext>> mapper,
|
|
|
|
IAPIConnector connector,
|
|
|
|
CancellationToken cancel = default
|
|
|
|
);
|
|
|
|
#endif
|
2020-05-05 04:26:37 +01:00
|
|
|
}
|
|
|
|
}
|