/// <summary>
        /// Queries the API endpoint asynchronously and returns a <see cref="HistoricalRatesResponse"/> object.
        /// </summary>
        /// <returns>A task that contains a normalized <see cref="HistoricalRatesResponse"/> object.</returns>
        public async Task <HistoricalRatesResponse> GetHistoricalRates(HistoricalRatesParamEndpoints historicalRatesParam)
        {
            HistoricalRatesResponse cachedResponse = Cache.GetObject <HistoricalRatesResponse>(historicalRatesParam);

            if (cachedResponse != null)
            {
                return(cachedResponse);
            }
            else
            {
                string      endpoint = historicalRatesParam.GetDescription();
                RestRequest request  = new(endpoint);
                RestResponse <HistoricalRatesResponse> response = await Client.ExecuteGetAsync <HistoricalRatesResponse>(request);

                if (response.IsSuccessful)
                {
                    Cache.SaveObject(historicalRatesParam, response.Data);
                    return(response.Data);
                }
                else
                {
                    OnError(response);
                    return(null);
                }
            }
        }