{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.CostExplorer.Types.ReservationPurchaseRecommendationDetail
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.CostExplorer.Types.ReservationPurchaseRecommendationDetail where

import qualified Amazonka.Core as Core
import Amazonka.CostExplorer.Types.InstanceDetails
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude

-- | Details about your recommended reservation purchase.
--
-- /See:/ 'newReservationPurchaseRecommendationDetail' smart constructor.
data ReservationPurchaseRecommendationDetail = ReservationPurchaseRecommendationDetail'
  { -- | The maximum number of normalized units that you used in an hour during
    -- the historical period. Amazon Web Services uses this to calculate your
    -- recommended reservation purchases.
    ReservationPurchaseRecommendationDetail -> Maybe Text
maximumNormalizedUnitsUsedPerHour :: Prelude.Maybe Prelude.Text,
    -- | How much purchasing this instance costs you on a monthly basis.
    ReservationPurchaseRecommendationDetail -> Maybe Text
recurringStandardMonthlyCost :: Prelude.Maybe Prelude.Text,
    -- | The average number of normalized units that you used in an hour during
    -- the historical period. Amazon Web Services uses this to calculate your
    -- recommended reservation purchases.
    ReservationPurchaseRecommendationDetail -> Maybe Text
averageNormalizedUnitsUsedPerHour :: Prelude.Maybe Prelude.Text,
    -- | The currency code that Amazon Web Services used to calculate the costs
    -- for this instance.
    ReservationPurchaseRecommendationDetail -> Maybe Text
currencyCode :: Prelude.Maybe Prelude.Text,
    -- | How much Amazon Web Services estimates that this specific recommendation
    -- could save you in a month, as a percentage of your overall costs.
    ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedMonthlySavingsPercentage :: Prelude.Maybe Prelude.Text,
    -- | The number of normalized units that Amazon Web Services recommends that
    -- you purchase.
    ReservationPurchaseRecommendationDetail -> Maybe Text
recommendedNormalizedUnitsToPurchase :: Prelude.Maybe Prelude.Text,
    -- | The average utilization of your instances. Amazon Web Services uses this
    -- to calculate your recommended reservation purchases.
    ReservationPurchaseRecommendationDetail -> Maybe Text
averageUtilization :: Prelude.Maybe Prelude.Text,
    -- | The account that this RI recommendation is for.
    ReservationPurchaseRecommendationDetail -> Maybe Text
accountId :: Prelude.Maybe Prelude.Text,
    -- | How much Amazon Web Services estimates that this specific recommendation
    -- could save you in a month.
    ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedMonthlySavingsAmount :: Prelude.Maybe Prelude.Text,
    -- | How much purchasing this instance costs you upfront.
    ReservationPurchaseRecommendationDetail -> Maybe Text
upfrontCost :: Prelude.Maybe Prelude.Text,
    -- | The minimum number of normalized units that you used in an hour during
    -- the historical period. Amazon Web Services uses this to calculate your
    -- recommended reservation purchases.
    ReservationPurchaseRecommendationDetail -> Maybe Text
minimumNormalizedUnitsUsedPerHour :: Prelude.Maybe Prelude.Text,
    -- | How much Amazon Web Services estimates that you spend on On-Demand
    -- Instances in a month.
    ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedMonthlyOnDemandCost :: Prelude.Maybe Prelude.Text,
    -- | The number of instances that Amazon Web Services recommends that you
    -- purchase.
    ReservationPurchaseRecommendationDetail -> Maybe Text
recommendedNumberOfInstancesToPurchase :: Prelude.Maybe Prelude.Text,
    -- | The maximum number of instances that you used in an hour during the
    -- historical period. Amazon Web Services uses this to calculate your
    -- recommended reservation purchases.
    ReservationPurchaseRecommendationDetail -> Maybe Text
maximumNumberOfInstancesUsedPerHour :: Prelude.Maybe Prelude.Text,
    -- | How much Amazon Web Services estimates that you would have spent for all
    -- usage during the specified historical period if you had a reservation.
    ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedReservationCostForLookbackPeriod :: Prelude.Maybe Prelude.Text,
    -- | Details about the instances that Amazon Web Services recommends that you
    -- purchase.
    ReservationPurchaseRecommendationDetail -> Maybe InstanceDetails
instanceDetails :: Prelude.Maybe InstanceDetails,
    -- | The average number of instances that you used in an hour during the
    -- historical period. Amazon Web Services uses this to calculate your
    -- recommended reservation purchases.
    ReservationPurchaseRecommendationDetail -> Maybe Text
averageNumberOfInstancesUsedPerHour :: Prelude.Maybe Prelude.Text,
    -- | The minimum number of instances that you used in an hour during the
    -- historical period. Amazon Web Services uses this to calculate your
    -- recommended reservation purchases.
    ReservationPurchaseRecommendationDetail -> Maybe Text
minimumNumberOfInstancesUsedPerHour :: Prelude.Maybe Prelude.Text,
    -- | How long Amazon Web Services estimates that it takes for this instance
    -- to start saving you money, in months.
    ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedBreakEvenInMonths :: Prelude.Maybe Prelude.Text
  }
  deriving (ReservationPurchaseRecommendationDetail
-> ReservationPurchaseRecommendationDetail -> Bool
(ReservationPurchaseRecommendationDetail
 -> ReservationPurchaseRecommendationDetail -> Bool)
-> (ReservationPurchaseRecommendationDetail
    -> ReservationPurchaseRecommendationDetail -> Bool)
-> Eq ReservationPurchaseRecommendationDetail
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReservationPurchaseRecommendationDetail
-> ReservationPurchaseRecommendationDetail -> Bool
$c/= :: ReservationPurchaseRecommendationDetail
-> ReservationPurchaseRecommendationDetail -> Bool
== :: ReservationPurchaseRecommendationDetail
-> ReservationPurchaseRecommendationDetail -> Bool
$c== :: ReservationPurchaseRecommendationDetail
-> ReservationPurchaseRecommendationDetail -> Bool
Prelude.Eq, ReadPrec [ReservationPurchaseRecommendationDetail]
ReadPrec ReservationPurchaseRecommendationDetail
Int -> ReadS ReservationPurchaseRecommendationDetail
ReadS [ReservationPurchaseRecommendationDetail]
(Int -> ReadS ReservationPurchaseRecommendationDetail)
-> ReadS [ReservationPurchaseRecommendationDetail]
-> ReadPrec ReservationPurchaseRecommendationDetail
-> ReadPrec [ReservationPurchaseRecommendationDetail]
-> Read ReservationPurchaseRecommendationDetail
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ReservationPurchaseRecommendationDetail]
$creadListPrec :: ReadPrec [ReservationPurchaseRecommendationDetail]
readPrec :: ReadPrec ReservationPurchaseRecommendationDetail
$creadPrec :: ReadPrec ReservationPurchaseRecommendationDetail
readList :: ReadS [ReservationPurchaseRecommendationDetail]
$creadList :: ReadS [ReservationPurchaseRecommendationDetail]
readsPrec :: Int -> ReadS ReservationPurchaseRecommendationDetail
$creadsPrec :: Int -> ReadS ReservationPurchaseRecommendationDetail
Prelude.Read, Int -> ReservationPurchaseRecommendationDetail -> ShowS
[ReservationPurchaseRecommendationDetail] -> ShowS
ReservationPurchaseRecommendationDetail -> String
(Int -> ReservationPurchaseRecommendationDetail -> ShowS)
-> (ReservationPurchaseRecommendationDetail -> String)
-> ([ReservationPurchaseRecommendationDetail] -> ShowS)
-> Show ReservationPurchaseRecommendationDetail
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ReservationPurchaseRecommendationDetail] -> ShowS
$cshowList :: [ReservationPurchaseRecommendationDetail] -> ShowS
show :: ReservationPurchaseRecommendationDetail -> String
$cshow :: ReservationPurchaseRecommendationDetail -> String
showsPrec :: Int -> ReservationPurchaseRecommendationDetail -> ShowS
$cshowsPrec :: Int -> ReservationPurchaseRecommendationDetail -> ShowS
Prelude.Show, (forall x.
 ReservationPurchaseRecommendationDetail
 -> Rep ReservationPurchaseRecommendationDetail x)
-> (forall x.
    Rep ReservationPurchaseRecommendationDetail x
    -> ReservationPurchaseRecommendationDetail)
-> Generic ReservationPurchaseRecommendationDetail
forall x.
Rep ReservationPurchaseRecommendationDetail x
-> ReservationPurchaseRecommendationDetail
forall x.
ReservationPurchaseRecommendationDetail
-> Rep ReservationPurchaseRecommendationDetail x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ReservationPurchaseRecommendationDetail x
-> ReservationPurchaseRecommendationDetail
$cfrom :: forall x.
ReservationPurchaseRecommendationDetail
-> Rep ReservationPurchaseRecommendationDetail x
Prelude.Generic)

-- |
-- Create a value of 'ReservationPurchaseRecommendationDetail' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'maximumNormalizedUnitsUsedPerHour', 'reservationPurchaseRecommendationDetail_maximumNormalizedUnitsUsedPerHour' - The maximum number of normalized units that you used in an hour during
-- the historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
--
-- 'recurringStandardMonthlyCost', 'reservationPurchaseRecommendationDetail_recurringStandardMonthlyCost' - How much purchasing this instance costs you on a monthly basis.
--
-- 'averageNormalizedUnitsUsedPerHour', 'reservationPurchaseRecommendationDetail_averageNormalizedUnitsUsedPerHour' - The average number of normalized units that you used in an hour during
-- the historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
--
-- 'currencyCode', 'reservationPurchaseRecommendationDetail_currencyCode' - The currency code that Amazon Web Services used to calculate the costs
-- for this instance.
--
-- 'estimatedMonthlySavingsPercentage', 'reservationPurchaseRecommendationDetail_estimatedMonthlySavingsPercentage' - How much Amazon Web Services estimates that this specific recommendation
-- could save you in a month, as a percentage of your overall costs.
--
-- 'recommendedNormalizedUnitsToPurchase', 'reservationPurchaseRecommendationDetail_recommendedNormalizedUnitsToPurchase' - The number of normalized units that Amazon Web Services recommends that
-- you purchase.
--
-- 'averageUtilization', 'reservationPurchaseRecommendationDetail_averageUtilization' - The average utilization of your instances. Amazon Web Services uses this
-- to calculate your recommended reservation purchases.
--
-- 'accountId', 'reservationPurchaseRecommendationDetail_accountId' - The account that this RI recommendation is for.
--
-- 'estimatedMonthlySavingsAmount', 'reservationPurchaseRecommendationDetail_estimatedMonthlySavingsAmount' - How much Amazon Web Services estimates that this specific recommendation
-- could save you in a month.
--
-- 'upfrontCost', 'reservationPurchaseRecommendationDetail_upfrontCost' - How much purchasing this instance costs you upfront.
--
-- 'minimumNormalizedUnitsUsedPerHour', 'reservationPurchaseRecommendationDetail_minimumNormalizedUnitsUsedPerHour' - The minimum number of normalized units that you used in an hour during
-- the historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
--
-- 'estimatedMonthlyOnDemandCost', 'reservationPurchaseRecommendationDetail_estimatedMonthlyOnDemandCost' - How much Amazon Web Services estimates that you spend on On-Demand
-- Instances in a month.
--
-- 'recommendedNumberOfInstancesToPurchase', 'reservationPurchaseRecommendationDetail_recommendedNumberOfInstancesToPurchase' - The number of instances that Amazon Web Services recommends that you
-- purchase.
--
-- 'maximumNumberOfInstancesUsedPerHour', 'reservationPurchaseRecommendationDetail_maximumNumberOfInstancesUsedPerHour' - The maximum number of instances that you used in an hour during the
-- historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
--
-- 'estimatedReservationCostForLookbackPeriod', 'reservationPurchaseRecommendationDetail_estimatedReservationCostForLookbackPeriod' - How much Amazon Web Services estimates that you would have spent for all
-- usage during the specified historical period if you had a reservation.
--
-- 'instanceDetails', 'reservationPurchaseRecommendationDetail_instanceDetails' - Details about the instances that Amazon Web Services recommends that you
-- purchase.
--
-- 'averageNumberOfInstancesUsedPerHour', 'reservationPurchaseRecommendationDetail_averageNumberOfInstancesUsedPerHour' - The average number of instances that you used in an hour during the
-- historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
--
-- 'minimumNumberOfInstancesUsedPerHour', 'reservationPurchaseRecommendationDetail_minimumNumberOfInstancesUsedPerHour' - The minimum number of instances that you used in an hour during the
-- historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
--
-- 'estimatedBreakEvenInMonths', 'reservationPurchaseRecommendationDetail_estimatedBreakEvenInMonths' - How long Amazon Web Services estimates that it takes for this instance
-- to start saving you money, in months.
newReservationPurchaseRecommendationDetail ::
  ReservationPurchaseRecommendationDetail
newReservationPurchaseRecommendationDetail :: ReservationPurchaseRecommendationDetail
newReservationPurchaseRecommendationDetail =
  ReservationPurchaseRecommendationDetail' :: Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe InstanceDetails
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> ReservationPurchaseRecommendationDetail
ReservationPurchaseRecommendationDetail'
    { $sel:maximumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
maximumNormalizedUnitsUsedPerHour =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:recurringStandardMonthlyCost:ReservationPurchaseRecommendationDetail' :: Maybe Text
recurringStandardMonthlyCost =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:averageNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
averageNormalizedUnitsUsedPerHour =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:currencyCode:ReservationPurchaseRecommendationDetail' :: Maybe Text
currencyCode = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:estimatedMonthlySavingsPercentage:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedMonthlySavingsPercentage =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:recommendedNormalizedUnitsToPurchase:ReservationPurchaseRecommendationDetail' :: Maybe Text
recommendedNormalizedUnitsToPurchase =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:averageUtilization:ReservationPurchaseRecommendationDetail' :: Maybe Text
averageUtilization =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:accountId:ReservationPurchaseRecommendationDetail' :: Maybe Text
accountId = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:estimatedMonthlySavingsAmount:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedMonthlySavingsAmount =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:upfrontCost:ReservationPurchaseRecommendationDetail' :: Maybe Text
upfrontCost = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:minimumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
minimumNormalizedUnitsUsedPerHour =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:estimatedMonthlyOnDemandCost:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedMonthlyOnDemandCost =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:recommendedNumberOfInstancesToPurchase:ReservationPurchaseRecommendationDetail' :: Maybe Text
recommendedNumberOfInstancesToPurchase =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:maximumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
maximumNumberOfInstancesUsedPerHour =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:estimatedReservationCostForLookbackPeriod:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedReservationCostForLookbackPeriod =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:instanceDetails:ReservationPurchaseRecommendationDetail' :: Maybe InstanceDetails
instanceDetails = Maybe InstanceDetails
forall a. Maybe a
Prelude.Nothing,
      $sel:averageNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
averageNumberOfInstancesUsedPerHour =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:minimumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
minimumNumberOfInstancesUsedPerHour =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:estimatedBreakEvenInMonths:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedBreakEvenInMonths =
        Maybe Text
forall a. Maybe a
Prelude.Nothing
    }

-- | The maximum number of normalized units that you used in an hour during
-- the historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
reservationPurchaseRecommendationDetail_maximumNormalizedUnitsUsedPerHour :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_maximumNormalizedUnitsUsedPerHour :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_maximumNormalizedUnitsUsedPerHour = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
maximumNormalizedUnitsUsedPerHour :: Maybe Text
$sel:maximumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
maximumNormalizedUnitsUsedPerHour} -> Maybe Text
maximumNormalizedUnitsUsedPerHour) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:maximumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
maximumNormalizedUnitsUsedPerHour = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | How much purchasing this instance costs you on a monthly basis.
reservationPurchaseRecommendationDetail_recurringStandardMonthlyCost :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_recurringStandardMonthlyCost :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_recurringStandardMonthlyCost = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
recurringStandardMonthlyCost :: Maybe Text
$sel:recurringStandardMonthlyCost:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
recurringStandardMonthlyCost} -> Maybe Text
recurringStandardMonthlyCost) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:recurringStandardMonthlyCost:ReservationPurchaseRecommendationDetail' :: Maybe Text
recurringStandardMonthlyCost = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | The average number of normalized units that you used in an hour during
-- the historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
reservationPurchaseRecommendationDetail_averageNormalizedUnitsUsedPerHour :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_averageNormalizedUnitsUsedPerHour :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_averageNormalizedUnitsUsedPerHour = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
averageNormalizedUnitsUsedPerHour :: Maybe Text
$sel:averageNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
averageNormalizedUnitsUsedPerHour} -> Maybe Text
averageNormalizedUnitsUsedPerHour) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:averageNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
averageNormalizedUnitsUsedPerHour = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | The currency code that Amazon Web Services used to calculate the costs
-- for this instance.
reservationPurchaseRecommendationDetail_currencyCode :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_currencyCode :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_currencyCode = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
currencyCode :: Maybe Text
$sel:currencyCode:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
currencyCode} -> Maybe Text
currencyCode) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:currencyCode:ReservationPurchaseRecommendationDetail' :: Maybe Text
currencyCode = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | How much Amazon Web Services estimates that this specific recommendation
-- could save you in a month, as a percentage of your overall costs.
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsPercentage :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsPercentage :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsPercentage = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
estimatedMonthlySavingsPercentage :: Maybe Text
$sel:estimatedMonthlySavingsPercentage:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedMonthlySavingsPercentage} -> Maybe Text
estimatedMonthlySavingsPercentage) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:estimatedMonthlySavingsPercentage:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedMonthlySavingsPercentage = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | The number of normalized units that Amazon Web Services recommends that
-- you purchase.
reservationPurchaseRecommendationDetail_recommendedNormalizedUnitsToPurchase :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_recommendedNormalizedUnitsToPurchase :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_recommendedNormalizedUnitsToPurchase = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
recommendedNormalizedUnitsToPurchase :: Maybe Text
$sel:recommendedNormalizedUnitsToPurchase:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
recommendedNormalizedUnitsToPurchase} -> Maybe Text
recommendedNormalizedUnitsToPurchase) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:recommendedNormalizedUnitsToPurchase:ReservationPurchaseRecommendationDetail' :: Maybe Text
recommendedNormalizedUnitsToPurchase = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | The average utilization of your instances. Amazon Web Services uses this
-- to calculate your recommended reservation purchases.
reservationPurchaseRecommendationDetail_averageUtilization :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_averageUtilization :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_averageUtilization = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
averageUtilization :: Maybe Text
$sel:averageUtilization:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
averageUtilization} -> Maybe Text
averageUtilization) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:averageUtilization:ReservationPurchaseRecommendationDetail' :: Maybe Text
averageUtilization = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | The account that this RI recommendation is for.
reservationPurchaseRecommendationDetail_accountId :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_accountId :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_accountId = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
accountId :: Maybe Text
$sel:accountId:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
accountId} -> Maybe Text
accountId) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:accountId:ReservationPurchaseRecommendationDetail' :: Maybe Text
accountId = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | How much Amazon Web Services estimates that this specific recommendation
-- could save you in a month.
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsAmount :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsAmount :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsAmount = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
estimatedMonthlySavingsAmount :: Maybe Text
$sel:estimatedMonthlySavingsAmount:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedMonthlySavingsAmount} -> Maybe Text
estimatedMonthlySavingsAmount) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:estimatedMonthlySavingsAmount:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedMonthlySavingsAmount = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | How much purchasing this instance costs you upfront.
reservationPurchaseRecommendationDetail_upfrontCost :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_upfrontCost :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_upfrontCost = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
upfrontCost :: Maybe Text
$sel:upfrontCost:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
upfrontCost} -> Maybe Text
upfrontCost) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:upfrontCost:ReservationPurchaseRecommendationDetail' :: Maybe Text
upfrontCost = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | The minimum number of normalized units that you used in an hour during
-- the historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
reservationPurchaseRecommendationDetail_minimumNormalizedUnitsUsedPerHour :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_minimumNormalizedUnitsUsedPerHour :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_minimumNormalizedUnitsUsedPerHour = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
minimumNormalizedUnitsUsedPerHour :: Maybe Text
$sel:minimumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
minimumNormalizedUnitsUsedPerHour} -> Maybe Text
minimumNormalizedUnitsUsedPerHour) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:minimumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
minimumNormalizedUnitsUsedPerHour = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | How much Amazon Web Services estimates that you spend on On-Demand
-- Instances in a month.
reservationPurchaseRecommendationDetail_estimatedMonthlyOnDemandCost :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_estimatedMonthlyOnDemandCost :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_estimatedMonthlyOnDemandCost = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
estimatedMonthlyOnDemandCost :: Maybe Text
$sel:estimatedMonthlyOnDemandCost:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedMonthlyOnDemandCost} -> Maybe Text
estimatedMonthlyOnDemandCost) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:estimatedMonthlyOnDemandCost:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedMonthlyOnDemandCost = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | The number of instances that Amazon Web Services recommends that you
-- purchase.
reservationPurchaseRecommendationDetail_recommendedNumberOfInstancesToPurchase :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_recommendedNumberOfInstancesToPurchase :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_recommendedNumberOfInstancesToPurchase = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
recommendedNumberOfInstancesToPurchase :: Maybe Text
$sel:recommendedNumberOfInstancesToPurchase:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
recommendedNumberOfInstancesToPurchase} -> Maybe Text
recommendedNumberOfInstancesToPurchase) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:recommendedNumberOfInstancesToPurchase:ReservationPurchaseRecommendationDetail' :: Maybe Text
recommendedNumberOfInstancesToPurchase = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | The maximum number of instances that you used in an hour during the
-- historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
reservationPurchaseRecommendationDetail_maximumNumberOfInstancesUsedPerHour :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_maximumNumberOfInstancesUsedPerHour :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_maximumNumberOfInstancesUsedPerHour = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
maximumNumberOfInstancesUsedPerHour :: Maybe Text
$sel:maximumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
maximumNumberOfInstancesUsedPerHour} -> Maybe Text
maximumNumberOfInstancesUsedPerHour) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:maximumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
maximumNumberOfInstancesUsedPerHour = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | How much Amazon Web Services estimates that you would have spent for all
-- usage during the specified historical period if you had a reservation.
reservationPurchaseRecommendationDetail_estimatedReservationCostForLookbackPeriod :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_estimatedReservationCostForLookbackPeriod :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_estimatedReservationCostForLookbackPeriod = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
estimatedReservationCostForLookbackPeriod :: Maybe Text
$sel:estimatedReservationCostForLookbackPeriod:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedReservationCostForLookbackPeriod} -> Maybe Text
estimatedReservationCostForLookbackPeriod) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:estimatedReservationCostForLookbackPeriod:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedReservationCostForLookbackPeriod = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | Details about the instances that Amazon Web Services recommends that you
-- purchase.
reservationPurchaseRecommendationDetail_instanceDetails :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe InstanceDetails)
reservationPurchaseRecommendationDetail_instanceDetails :: (Maybe InstanceDetails -> f (Maybe InstanceDetails))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_instanceDetails = (ReservationPurchaseRecommendationDetail -> Maybe InstanceDetails)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe InstanceDetails
    -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe InstanceDetails)
     (Maybe InstanceDetails)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe InstanceDetails
instanceDetails :: Maybe InstanceDetails
$sel:instanceDetails:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe InstanceDetails
instanceDetails} -> Maybe InstanceDetails
instanceDetails) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe InstanceDetails
a -> ReservationPurchaseRecommendationDetail
s {$sel:instanceDetails:ReservationPurchaseRecommendationDetail' :: Maybe InstanceDetails
instanceDetails = Maybe InstanceDetails
a} :: ReservationPurchaseRecommendationDetail)

-- | The average number of instances that you used in an hour during the
-- historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
reservationPurchaseRecommendationDetail_averageNumberOfInstancesUsedPerHour :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_averageNumberOfInstancesUsedPerHour :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_averageNumberOfInstancesUsedPerHour = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
averageNumberOfInstancesUsedPerHour :: Maybe Text
$sel:averageNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
averageNumberOfInstancesUsedPerHour} -> Maybe Text
averageNumberOfInstancesUsedPerHour) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:averageNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
averageNumberOfInstancesUsedPerHour = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | The minimum number of instances that you used in an hour during the
-- historical period. Amazon Web Services uses this to calculate your
-- recommended reservation purchases.
reservationPurchaseRecommendationDetail_minimumNumberOfInstancesUsedPerHour :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_minimumNumberOfInstancesUsedPerHour :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_minimumNumberOfInstancesUsedPerHour = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
minimumNumberOfInstancesUsedPerHour :: Maybe Text
$sel:minimumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
minimumNumberOfInstancesUsedPerHour} -> Maybe Text
minimumNumberOfInstancesUsedPerHour) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:minimumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
minimumNumberOfInstancesUsedPerHour = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

-- | How long Amazon Web Services estimates that it takes for this instance
-- to start saving you money, in months.
reservationPurchaseRecommendationDetail_estimatedBreakEvenInMonths :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_estimatedBreakEvenInMonths :: (Maybe Text -> f (Maybe Text))
-> ReservationPurchaseRecommendationDetail
-> f ReservationPurchaseRecommendationDetail
reservationPurchaseRecommendationDetail_estimatedBreakEvenInMonths = (ReservationPurchaseRecommendationDetail -> Maybe Text)
-> (ReservationPurchaseRecommendationDetail
    -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Lens
     ReservationPurchaseRecommendationDetail
     ReservationPurchaseRecommendationDetail
     (Maybe Text)
     (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservationPurchaseRecommendationDetail' {Maybe Text
estimatedBreakEvenInMonths :: Maybe Text
$sel:estimatedBreakEvenInMonths:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedBreakEvenInMonths} -> Maybe Text
estimatedBreakEvenInMonths) (\s :: ReservationPurchaseRecommendationDetail
s@ReservationPurchaseRecommendationDetail' {} Maybe Text
a -> ReservationPurchaseRecommendationDetail
s {$sel:estimatedBreakEvenInMonths:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedBreakEvenInMonths = Maybe Text
a} :: ReservationPurchaseRecommendationDetail)

instance
  Core.FromJSON
    ReservationPurchaseRecommendationDetail
  where
  parseJSON :: Value -> Parser ReservationPurchaseRecommendationDetail
parseJSON =
    String
-> (Object -> Parser ReservationPurchaseRecommendationDetail)
-> Value
-> Parser ReservationPurchaseRecommendationDetail
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Core.withObject
      String
"ReservationPurchaseRecommendationDetail"
      ( \Object
x ->
          Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe InstanceDetails
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> ReservationPurchaseRecommendationDetail
ReservationPurchaseRecommendationDetail'
            (Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> Maybe InstanceDetails
 -> Maybe Text
 -> Maybe Text
 -> Maybe Text
 -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"MaximumNormalizedUnitsUsedPerHour")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"RecurringStandardMonthlyCost")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"AverageNormalizedUnitsUsedPerHour")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"CurrencyCode")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"EstimatedMonthlySavingsPercentage")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"RecommendedNormalizedUnitsToPurchase")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"AverageUtilization")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"AccountId")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"EstimatedMonthlySavingsAmount")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"UpfrontCost")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"MinimumNormalizedUnitsUsedPerHour")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"EstimatedMonthlyOnDemandCost")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"RecommendedNumberOfInstancesToPurchase")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"MaximumNumberOfInstancesUsedPerHour")
            Parser
  (Maybe Text
   -> Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe InstanceDetails
      -> Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x
                            Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"EstimatedReservationCostForLookbackPeriod"
                        )
            Parser
  (Maybe InstanceDetails
   -> Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe InstanceDetails)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Text
      -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe InstanceDetails)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"InstanceDetails")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Text
   -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Text -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"AverageNumberOfInstancesUsedPerHour")
            Parser
  (Maybe Text
   -> Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser (Maybe Text -> ReservationPurchaseRecommendationDetail)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"MinimumNumberOfInstancesUsedPerHour")
            Parser (Maybe Text -> ReservationPurchaseRecommendationDetail)
-> Parser (Maybe Text)
-> Parser ReservationPurchaseRecommendationDetail
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"EstimatedBreakEvenInMonths")
      )

instance
  Prelude.Hashable
    ReservationPurchaseRecommendationDetail

instance
  Prelude.NFData
    ReservationPurchaseRecommendationDetail