internal static Uri ComposeGetElectricityUnitRatesUri(string productCode, string tariffCode, ElectricityUnitRate rate, DateTimeOffset?from, DateTimeOffset?to)
        {
            Preconditions.IsNotNullOrWhiteSpace(productCode, nameof(productCode));
            Preconditions.IsNotNullOrWhiteSpace(tariffCode, nameof(tariffCode));

            return(new Uri($"{BaseUrl}/v1/products/{productCode}/electricity-tariffs/{tariffCode}/{GetRateString()}-unit-rates/")
                   .AddQueryParam("page_size", MaxTariffsPageSize)
                   .AddQueryParam("period_from", from)
                   .AddQueryParam("period_to", to));

            string GetRateString()
            {
                switch (rate)
                {
                case ElectricityUnitRate.Standard: return("standard");

                case ElectricityUnitRate.Day: return("day");

                case ElectricityUnitRate.Night: return("night");

                default: throw new ArgumentOutOfRangeException(nameof(rate));
                }
            }
        }
 public async Task <IEnumerable <Charge> > GetElectricityUnitRatesAsync(string productCode, string tariffCode,
                                                                        ElectricityUnitRate rate = ElectricityUnitRate.Standard, DateTimeOffset?from = null,
                                                                        DateTimeOffset?to        = null)
 {
     return(await GetCollectionAsync <Charge>(ComposeGetElectricityUnitRatesUri(productCode, tariffCode, rate, from, to)));
 }