private async Task <IReadOnlyDictionary <String, TApi> > getLatestAsync <TApi, TJson>( LatestDataListRequest request, String items, Func <JsonLatestData <JsonHistoricalCryptoQuote>, Dictionary <String, TJson> > itemsSelector, CancellationToken cancellationToken) where TJson : TApi, ISymbolMutable => await getLatestAsync <TApi, TJson>( await request.EnsureNotNull(nameof(request)).Validate() .GetUriBuilderAsync(_httpClient, items).ConfigureAwait(false), itemsSelector, cancellationToken).ConfigureAwait(false);
public Task <IReadOnlyDictionary <String, IQuote> > ListLatestQuotesAsync( LatestDataListRequest request, CancellationToken cancellationToken = default) => getLatestAsync <IQuote, JsonHistoricalCryptoQuote>( request, "quotes", _ => _.Quotes, cancellationToken);
public Task <IReadOnlyDictionary <String, IBar> > ListLatestBarsAsync( LatestDataListRequest request, CancellationToken cancellationToken = default) => getLatestAsync <IBar, JsonHistoricalBar>( request, "bars", _ => _.Bars, cancellationToken);
public Task <IReadOnlyDictionary <String, ITrade> > ListLatestTradesAsync( LatestDataListRequest request, CancellationToken cancellationToken = default) => getLatestAsync <ITrade, JsonHistoricalTrade>( request, "trades", _ => _.Trades, cancellationToken);