{-# 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-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.CostExplorer.Types.ReservationPurchaseRecommendationDetail where

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

-- | Details about your recommended reservation purchase.
--
-- /See:/ 'newReservationPurchaseRecommendationDetail' smart constructor.
data ReservationPurchaseRecommendationDetail = ReservationPurchaseRecommendationDetail'
  { -- | The account that this Reserved Instance (RI) recommendation is for.
    ReservationPurchaseRecommendationDetail -> Maybe Text
accountId :: 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 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 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 currency code that Amazon Web Services used to calculate the costs
    -- for this instance.
    ReservationPurchaseRecommendationDetail -> Maybe Text
currencyCode :: 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,
    -- | How much Amazon Web Services estimates that you spend on On-Demand
    -- Instances in a month.
    ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedMonthlyOnDemandCost :: Prelude.Maybe Prelude.Text,
    -- | How much Amazon Web Services estimates that this specific recommendation
    -- might save you in a month.
    ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedMonthlySavingsAmount :: Prelude.Maybe Prelude.Text,
    -- | How much Amazon Web Services estimates that this specific recommendation
    -- might save you in a month, as a percentage of your overall costs.
    ReservationPurchaseRecommendationDetail -> Maybe Text
estimatedMonthlySavingsPercentage :: Prelude.Maybe Prelude.Text,
    -- | How much Amazon Web Services estimates that you might spend 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 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,
    -- | 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,
    -- | 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,
    -- | 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,
    -- | The number of normalized units that Amazon Web Services recommends that
    -- you purchase.
    ReservationPurchaseRecommendationDetail -> Maybe Text
recommendedNormalizedUnitsToPurchase :: Prelude.Maybe Prelude.Text,
    -- | The number of instances that Amazon Web Services recommends that you
    -- purchase.
    ReservationPurchaseRecommendationDetail -> Maybe Text
recommendedNumberOfInstancesToPurchase :: Prelude.Maybe Prelude.Text,
    -- | How much purchasing this instance costs you on a monthly basis.
    ReservationPurchaseRecommendationDetail -> Maybe Text
recurringStandardMonthlyCost :: Prelude.Maybe Prelude.Text,
    -- | How much purchasing this instance costs you upfront.
    ReservationPurchaseRecommendationDetail -> Maybe Text
upfrontCost :: Prelude.Maybe Prelude.Text
  }
  deriving (ReservationPurchaseRecommendationDetail
-> ReservationPurchaseRecommendationDetail -> Bool
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]
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
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.
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:
--
-- 'accountId', 'reservationPurchaseRecommendationDetail_accountId' - The account that this Reserved Instance (RI) recommendation is for.
--
-- '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.
--
-- '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.
--
-- 'averageUtilization', 'reservationPurchaseRecommendationDetail_averageUtilization' - The average utilization of your instances. 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.
--
-- 'estimatedBreakEvenInMonths', 'reservationPurchaseRecommendationDetail_estimatedBreakEvenInMonths' - How long Amazon Web Services estimates that it takes for this instance
-- to start saving you money, in months.
--
-- 'estimatedMonthlyOnDemandCost', 'reservationPurchaseRecommendationDetail_estimatedMonthlyOnDemandCost' - How much Amazon Web Services estimates that you spend on On-Demand
-- Instances in a month.
--
-- 'estimatedMonthlySavingsAmount', 'reservationPurchaseRecommendationDetail_estimatedMonthlySavingsAmount' - How much Amazon Web Services estimates that this specific recommendation
-- might save you in a month.
--
-- 'estimatedMonthlySavingsPercentage', 'reservationPurchaseRecommendationDetail_estimatedMonthlySavingsPercentage' - How much Amazon Web Services estimates that this specific recommendation
-- might save you in a month, as a percentage of your overall costs.
--
-- 'estimatedReservationCostForLookbackPeriod', 'reservationPurchaseRecommendationDetail_estimatedReservationCostForLookbackPeriod' - How much Amazon Web Services estimates that you might spend 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.
--
-- '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.
--
-- '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.
--
-- '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.
--
-- '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.
--
-- 'recommendedNormalizedUnitsToPurchase', 'reservationPurchaseRecommendationDetail_recommendedNormalizedUnitsToPurchase' - The number of normalized units that Amazon Web Services recommends that
-- you purchase.
--
-- 'recommendedNumberOfInstancesToPurchase', 'reservationPurchaseRecommendationDetail_recommendedNumberOfInstancesToPurchase' - The number of instances that Amazon Web Services recommends that you
-- purchase.
--
-- 'recurringStandardMonthlyCost', 'reservationPurchaseRecommendationDetail_recurringStandardMonthlyCost' - How much purchasing this instance costs you on a monthly basis.
--
-- 'upfrontCost', 'reservationPurchaseRecommendationDetail_upfrontCost' - How much purchasing this instance costs you upfront.
newReservationPurchaseRecommendationDetail ::
  ReservationPurchaseRecommendationDetail
newReservationPurchaseRecommendationDetail :: ReservationPurchaseRecommendationDetail
newReservationPurchaseRecommendationDetail =
  ReservationPurchaseRecommendationDetail'
    { $sel:accountId:ReservationPurchaseRecommendationDetail' :: Maybe Text
accountId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:averageNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
averageNormalizedUnitsUsedPerHour =
        forall a. Maybe a
Prelude.Nothing,
      $sel:averageNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
averageNumberOfInstancesUsedPerHour =
        forall a. Maybe a
Prelude.Nothing,
      $sel:averageUtilization:ReservationPurchaseRecommendationDetail' :: Maybe Text
averageUtilization =
        forall a. Maybe a
Prelude.Nothing,
      $sel:currencyCode:ReservationPurchaseRecommendationDetail' :: Maybe Text
currencyCode = forall a. Maybe a
Prelude.Nothing,
      $sel:estimatedBreakEvenInMonths:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedBreakEvenInMonths =
        forall a. Maybe a
Prelude.Nothing,
      $sel:estimatedMonthlyOnDemandCost:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedMonthlyOnDemandCost =
        forall a. Maybe a
Prelude.Nothing,
      $sel:estimatedMonthlySavingsAmount:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedMonthlySavingsAmount =
        forall a. Maybe a
Prelude.Nothing,
      $sel:estimatedMonthlySavingsPercentage:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedMonthlySavingsPercentage =
        forall a. Maybe a
Prelude.Nothing,
      $sel:estimatedReservationCostForLookbackPeriod:ReservationPurchaseRecommendationDetail' :: Maybe Text
estimatedReservationCostForLookbackPeriod =
        forall a. Maybe a
Prelude.Nothing,
      $sel:instanceDetails:ReservationPurchaseRecommendationDetail' :: Maybe InstanceDetails
instanceDetails = forall a. Maybe a
Prelude.Nothing,
      $sel:maximumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
maximumNormalizedUnitsUsedPerHour =
        forall a. Maybe a
Prelude.Nothing,
      $sel:maximumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
maximumNumberOfInstancesUsedPerHour =
        forall a. Maybe a
Prelude.Nothing,
      $sel:minimumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
minimumNormalizedUnitsUsedPerHour =
        forall a. Maybe a
Prelude.Nothing,
      $sel:minimumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: Maybe Text
minimumNumberOfInstancesUsedPerHour =
        forall a. Maybe a
Prelude.Nothing,
      $sel:recommendedNormalizedUnitsToPurchase:ReservationPurchaseRecommendationDetail' :: Maybe Text
recommendedNormalizedUnitsToPurchase =
        forall a. Maybe a
Prelude.Nothing,
      $sel:recommendedNumberOfInstancesToPurchase:ReservationPurchaseRecommendationDetail' :: Maybe Text
recommendedNumberOfInstancesToPurchase =
        forall a. Maybe a
Prelude.Nothing,
      $sel:recurringStandardMonthlyCost:ReservationPurchaseRecommendationDetail' :: Maybe Text
recurringStandardMonthlyCost =
        forall a. Maybe a
Prelude.Nothing,
      $sel:upfrontCost:ReservationPurchaseRecommendationDetail' :: Maybe Text
upfrontCost = forall a. Maybe a
Prelude.Nothing
    }

-- | The account that this Reserved Instance (RI) recommendation is for.
reservationPurchaseRecommendationDetail_accountId :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_accountId :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_accountId = 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)

-- | 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 :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_averageNormalizedUnitsUsedPerHour = 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 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 :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_averageNumberOfInstancesUsedPerHour = 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 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 :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_averageUtilization = 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 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 :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_currencyCode = 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 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 :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_estimatedBreakEvenInMonths = 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)

-- | 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 :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_estimatedMonthlyOnDemandCost = 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)

-- | How much Amazon Web Services estimates that this specific recommendation
-- might save you in a month.
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsAmount :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsAmount :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsAmount = 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 Amazon Web Services estimates that this specific recommendation
-- might save you in a month, as a percentage of your overall costs.
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsPercentage :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsPercentage :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_estimatedMonthlySavingsPercentage = 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)

-- | How much Amazon Web Services estimates that you might spend for all
-- usage during the specified historical period if you had a reservation.
reservationPurchaseRecommendationDetail_estimatedReservationCostForLookbackPeriod :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_estimatedReservationCostForLookbackPeriod :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_estimatedReservationCostForLookbackPeriod = 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 :: Lens'
  ReservationPurchaseRecommendationDetail (Maybe InstanceDetails)
reservationPurchaseRecommendationDetail_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 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 :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_maximumNormalizedUnitsUsedPerHour = 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)

-- | 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 :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_maximumNumberOfInstancesUsedPerHour = 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)

-- | 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 :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_minimumNormalizedUnitsUsedPerHour = 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)

-- | 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 :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_minimumNumberOfInstancesUsedPerHour = 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)

-- | The number of normalized units that Amazon Web Services recommends that
-- you purchase.
reservationPurchaseRecommendationDetail_recommendedNormalizedUnitsToPurchase :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_recommendedNormalizedUnitsToPurchase :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_recommendedNormalizedUnitsToPurchase = 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 number of instances that Amazon Web Services recommends that you
-- purchase.
reservationPurchaseRecommendationDetail_recommendedNumberOfInstancesToPurchase :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_recommendedNumberOfInstancesToPurchase :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_recommendedNumberOfInstancesToPurchase = 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)

-- | How much purchasing this instance costs you on a monthly basis.
reservationPurchaseRecommendationDetail_recurringStandardMonthlyCost :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_recurringStandardMonthlyCost :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_recurringStandardMonthlyCost = 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)

-- | How much purchasing this instance costs you upfront.
reservationPurchaseRecommendationDetail_upfrontCost :: Lens.Lens' ReservationPurchaseRecommendationDetail (Prelude.Maybe Prelude.Text)
reservationPurchaseRecommendationDetail_upfrontCost :: Lens' ReservationPurchaseRecommendationDetail (Maybe Text)
reservationPurchaseRecommendationDetail_upfrontCost = 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)

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

instance
  Prelude.Hashable
    ReservationPurchaseRecommendationDetail
  where
  hashWithSalt :: Int -> ReservationPurchaseRecommendationDetail -> Int
hashWithSalt
    Int
_salt
    ReservationPurchaseRecommendationDetail' {Maybe Text
Maybe InstanceDetails
upfrontCost :: Maybe Text
recurringStandardMonthlyCost :: Maybe Text
recommendedNumberOfInstancesToPurchase :: Maybe Text
recommendedNormalizedUnitsToPurchase :: Maybe Text
minimumNumberOfInstancesUsedPerHour :: Maybe Text
minimumNormalizedUnitsUsedPerHour :: Maybe Text
maximumNumberOfInstancesUsedPerHour :: Maybe Text
maximumNormalizedUnitsUsedPerHour :: Maybe Text
instanceDetails :: Maybe InstanceDetails
estimatedReservationCostForLookbackPeriod :: Maybe Text
estimatedMonthlySavingsPercentage :: Maybe Text
estimatedMonthlySavingsAmount :: Maybe Text
estimatedMonthlyOnDemandCost :: Maybe Text
estimatedBreakEvenInMonths :: Maybe Text
currencyCode :: Maybe Text
averageUtilization :: Maybe Text
averageNumberOfInstancesUsedPerHour :: Maybe Text
averageNormalizedUnitsUsedPerHour :: Maybe Text
accountId :: Maybe Text
$sel:upfrontCost:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:recurringStandardMonthlyCost:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:recommendedNumberOfInstancesToPurchase:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:recommendedNormalizedUnitsToPurchase:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:minimumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:minimumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:maximumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:maximumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:instanceDetails:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe InstanceDetails
$sel:estimatedReservationCostForLookbackPeriod:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:estimatedMonthlySavingsPercentage:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:estimatedMonthlySavingsAmount:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:estimatedMonthlyOnDemandCost:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:estimatedBreakEvenInMonths:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:currencyCode:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:averageUtilization:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:averageNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:averageNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:accountId:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
accountId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
averageNormalizedUnitsUsedPerHour
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
averageNumberOfInstancesUsedPerHour
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
averageUtilization
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
currencyCode
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
estimatedBreakEvenInMonths
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
estimatedMonthlyOnDemandCost
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
estimatedMonthlySavingsAmount
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
estimatedMonthlySavingsPercentage
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
estimatedReservationCostForLookbackPeriod
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InstanceDetails
instanceDetails
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
maximumNormalizedUnitsUsedPerHour
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
maximumNumberOfInstancesUsedPerHour
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
minimumNormalizedUnitsUsedPerHour
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
minimumNumberOfInstancesUsedPerHour
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
recommendedNormalizedUnitsToPurchase
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
recommendedNumberOfInstancesToPurchase
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
recurringStandardMonthlyCost
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
upfrontCost

instance
  Prelude.NFData
    ReservationPurchaseRecommendationDetail
  where
  rnf :: ReservationPurchaseRecommendationDetail -> ()
rnf ReservationPurchaseRecommendationDetail' {Maybe Text
Maybe InstanceDetails
upfrontCost :: Maybe Text
recurringStandardMonthlyCost :: Maybe Text
recommendedNumberOfInstancesToPurchase :: Maybe Text
recommendedNormalizedUnitsToPurchase :: Maybe Text
minimumNumberOfInstancesUsedPerHour :: Maybe Text
minimumNormalizedUnitsUsedPerHour :: Maybe Text
maximumNumberOfInstancesUsedPerHour :: Maybe Text
maximumNormalizedUnitsUsedPerHour :: Maybe Text
instanceDetails :: Maybe InstanceDetails
estimatedReservationCostForLookbackPeriod :: Maybe Text
estimatedMonthlySavingsPercentage :: Maybe Text
estimatedMonthlySavingsAmount :: Maybe Text
estimatedMonthlyOnDemandCost :: Maybe Text
estimatedBreakEvenInMonths :: Maybe Text
currencyCode :: Maybe Text
averageUtilization :: Maybe Text
averageNumberOfInstancesUsedPerHour :: Maybe Text
averageNormalizedUnitsUsedPerHour :: Maybe Text
accountId :: Maybe Text
$sel:upfrontCost:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:recurringStandardMonthlyCost:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:recommendedNumberOfInstancesToPurchase:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:recommendedNormalizedUnitsToPurchase:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:minimumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:minimumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:maximumNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:maximumNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:instanceDetails:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe InstanceDetails
$sel:estimatedReservationCostForLookbackPeriod:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:estimatedMonthlySavingsPercentage:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:estimatedMonthlySavingsAmount:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:estimatedMonthlyOnDemandCost:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:estimatedBreakEvenInMonths:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:currencyCode:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:averageUtilization:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:averageNumberOfInstancesUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:averageNormalizedUnitsUsedPerHour:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
$sel:accountId:ReservationPurchaseRecommendationDetail' :: ReservationPurchaseRecommendationDetail -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
accountId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
averageNormalizedUnitsUsedPerHour
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
averageNumberOfInstancesUsedPerHour
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
averageUtilization
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
currencyCode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
estimatedBreakEvenInMonths
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
estimatedMonthlyOnDemandCost
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
estimatedMonthlySavingsAmount
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
estimatedMonthlySavingsPercentage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Text
estimatedReservationCostForLookbackPeriod
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InstanceDetails
instanceDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
maximumNormalizedUnitsUsedPerHour
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Text
maximumNumberOfInstancesUsedPerHour
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Text
minimumNormalizedUnitsUsedPerHour
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Text
minimumNumberOfInstancesUsedPerHour
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Text
recommendedNormalizedUnitsToPurchase
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Text
recommendedNumberOfInstancesToPurchase
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe Text
recurringStandardMonthlyCost
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
upfrontCost