{-# 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.EC2.Types.ReservedInstancesOffering
-- 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.EC2.Types.ReservedInstancesOffering where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Internal
import Amazonka.EC2.Types.CurrencyCodeValues
import Amazonka.EC2.Types.InstanceType
import Amazonka.EC2.Types.OfferingClassType
import Amazonka.EC2.Types.OfferingTypeValues
import Amazonka.EC2.Types.PricingDetail
import Amazonka.EC2.Types.RIProductDescription
import Amazonka.EC2.Types.RecurringCharge
import Amazonka.EC2.Types.Scope
import Amazonka.EC2.Types.Tenancy
import qualified Amazonka.Prelude as Prelude

-- | Describes a Reserved Instance offering.
--
-- /See:/ 'newReservedInstancesOffering' smart constructor.
data ReservedInstancesOffering = ReservedInstancesOffering'
  { -- | The Availability Zone in which the Reserved Instance can be used.
    ReservedInstancesOffering -> Maybe Text
availabilityZone :: Prelude.Maybe Prelude.Text,
    -- | The currency of the Reserved Instance offering you are purchasing. It\'s
    -- specified using ISO 4217 standard currency codes. At this time, the only
    -- supported currency is @USD@.
    ReservedInstancesOffering -> Maybe CurrencyCodeValues
currencyCode :: Prelude.Maybe CurrencyCodeValues,
    -- | The duration of the Reserved Instance, in seconds.
    ReservedInstancesOffering -> Maybe Integer
duration :: Prelude.Maybe Prelude.Integer,
    -- | The purchase price of the Reserved Instance.
    ReservedInstancesOffering -> Maybe Double
fixedPrice :: Prelude.Maybe Prelude.Double,
    -- | The tenancy of the instance.
    ReservedInstancesOffering -> Maybe Tenancy
instanceTenancy :: Prelude.Maybe Tenancy,
    -- | The instance type on which the Reserved Instance can be used.
    ReservedInstancesOffering -> Maybe InstanceType
instanceType :: Prelude.Maybe InstanceType,
    -- | Indicates whether the offering is available through the Reserved
    -- Instance Marketplace (resale) or Amazon Web Services. If it\'s a
    -- Reserved Instance Marketplace offering, this is @true@.
    ReservedInstancesOffering -> Maybe Bool
marketplace :: Prelude.Maybe Prelude.Bool,
    -- | If @convertible@ it can be exchanged for Reserved Instances of the same
    -- or higher monetary value, with different configurations. If @standard@,
    -- it is not possible to perform an exchange.
    ReservedInstancesOffering -> Maybe OfferingClassType
offeringClass :: Prelude.Maybe OfferingClassType,
    -- | The Reserved Instance offering type.
    ReservedInstancesOffering -> Maybe OfferingTypeValues
offeringType :: Prelude.Maybe OfferingTypeValues,
    -- | The pricing details of the Reserved Instance offering.
    ReservedInstancesOffering -> Maybe [PricingDetail]
pricingDetails :: Prelude.Maybe [PricingDetail],
    -- | The Reserved Instance product platform description.
    ReservedInstancesOffering -> Maybe RIProductDescription
productDescription :: Prelude.Maybe RIProductDescription,
    -- | The recurring charge tag assigned to the resource.
    ReservedInstancesOffering -> Maybe [RecurringCharge]
recurringCharges :: Prelude.Maybe [RecurringCharge],
    -- | The ID of the Reserved Instance offering. This is the offering ID used
    -- in GetReservedInstancesExchangeQuote to confirm that an exchange can be
    -- made.
    ReservedInstancesOffering -> Maybe Text
reservedInstancesOfferingId :: Prelude.Maybe Prelude.Text,
    -- | Whether the Reserved Instance is applied to instances in a Region or an
    -- Availability Zone.
    ReservedInstancesOffering -> Maybe Scope
scope :: Prelude.Maybe Scope,
    -- | The usage price of the Reserved Instance, per hour.
    ReservedInstancesOffering -> Maybe Double
usagePrice :: Prelude.Maybe Prelude.Double
  }
  deriving (ReservedInstancesOffering -> ReservedInstancesOffering -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReservedInstancesOffering -> ReservedInstancesOffering -> Bool
$c/= :: ReservedInstancesOffering -> ReservedInstancesOffering -> Bool
== :: ReservedInstancesOffering -> ReservedInstancesOffering -> Bool
$c== :: ReservedInstancesOffering -> ReservedInstancesOffering -> Bool
Prelude.Eq, ReadPrec [ReservedInstancesOffering]
ReadPrec ReservedInstancesOffering
Int -> ReadS ReservedInstancesOffering
ReadS [ReservedInstancesOffering]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ReservedInstancesOffering]
$creadListPrec :: ReadPrec [ReservedInstancesOffering]
readPrec :: ReadPrec ReservedInstancesOffering
$creadPrec :: ReadPrec ReservedInstancesOffering
readList :: ReadS [ReservedInstancesOffering]
$creadList :: ReadS [ReservedInstancesOffering]
readsPrec :: Int -> ReadS ReservedInstancesOffering
$creadsPrec :: Int -> ReadS ReservedInstancesOffering
Prelude.Read, Int -> ReservedInstancesOffering -> ShowS
[ReservedInstancesOffering] -> ShowS
ReservedInstancesOffering -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ReservedInstancesOffering] -> ShowS
$cshowList :: [ReservedInstancesOffering] -> ShowS
show :: ReservedInstancesOffering -> String
$cshow :: ReservedInstancesOffering -> String
showsPrec :: Int -> ReservedInstancesOffering -> ShowS
$cshowsPrec :: Int -> ReservedInstancesOffering -> ShowS
Prelude.Show, forall x.
Rep ReservedInstancesOffering x -> ReservedInstancesOffering
forall x.
ReservedInstancesOffering -> Rep ReservedInstancesOffering x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ReservedInstancesOffering x -> ReservedInstancesOffering
$cfrom :: forall x.
ReservedInstancesOffering -> Rep ReservedInstancesOffering x
Prelude.Generic)

-- |
-- Create a value of 'ReservedInstancesOffering' 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:
--
-- 'availabilityZone', 'reservedInstancesOffering_availabilityZone' - The Availability Zone in which the Reserved Instance can be used.
--
-- 'currencyCode', 'reservedInstancesOffering_currencyCode' - The currency of the Reserved Instance offering you are purchasing. It\'s
-- specified using ISO 4217 standard currency codes. At this time, the only
-- supported currency is @USD@.
--
-- 'duration', 'reservedInstancesOffering_duration' - The duration of the Reserved Instance, in seconds.
--
-- 'fixedPrice', 'reservedInstancesOffering_fixedPrice' - The purchase price of the Reserved Instance.
--
-- 'instanceTenancy', 'reservedInstancesOffering_instanceTenancy' - The tenancy of the instance.
--
-- 'instanceType', 'reservedInstancesOffering_instanceType' - The instance type on which the Reserved Instance can be used.
--
-- 'marketplace', 'reservedInstancesOffering_marketplace' - Indicates whether the offering is available through the Reserved
-- Instance Marketplace (resale) or Amazon Web Services. If it\'s a
-- Reserved Instance Marketplace offering, this is @true@.
--
-- 'offeringClass', 'reservedInstancesOffering_offeringClass' - If @convertible@ it can be exchanged for Reserved Instances of the same
-- or higher monetary value, with different configurations. If @standard@,
-- it is not possible to perform an exchange.
--
-- 'offeringType', 'reservedInstancesOffering_offeringType' - The Reserved Instance offering type.
--
-- 'pricingDetails', 'reservedInstancesOffering_pricingDetails' - The pricing details of the Reserved Instance offering.
--
-- 'productDescription', 'reservedInstancesOffering_productDescription' - The Reserved Instance product platform description.
--
-- 'recurringCharges', 'reservedInstancesOffering_recurringCharges' - The recurring charge tag assigned to the resource.
--
-- 'reservedInstancesOfferingId', 'reservedInstancesOffering_reservedInstancesOfferingId' - The ID of the Reserved Instance offering. This is the offering ID used
-- in GetReservedInstancesExchangeQuote to confirm that an exchange can be
-- made.
--
-- 'scope', 'reservedInstancesOffering_scope' - Whether the Reserved Instance is applied to instances in a Region or an
-- Availability Zone.
--
-- 'usagePrice', 'reservedInstancesOffering_usagePrice' - The usage price of the Reserved Instance, per hour.
newReservedInstancesOffering ::
  ReservedInstancesOffering
newReservedInstancesOffering :: ReservedInstancesOffering
newReservedInstancesOffering =
  ReservedInstancesOffering'
    { $sel:availabilityZone:ReservedInstancesOffering' :: Maybe Text
availabilityZone =
        forall a. Maybe a
Prelude.Nothing,
      $sel:currencyCode:ReservedInstancesOffering' :: Maybe CurrencyCodeValues
currencyCode = forall a. Maybe a
Prelude.Nothing,
      $sel:duration:ReservedInstancesOffering' :: Maybe Integer
duration = forall a. Maybe a
Prelude.Nothing,
      $sel:fixedPrice:ReservedInstancesOffering' :: Maybe Double
fixedPrice = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceTenancy:ReservedInstancesOffering' :: Maybe Tenancy
instanceTenancy = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceType:ReservedInstancesOffering' :: Maybe InstanceType
instanceType = forall a. Maybe a
Prelude.Nothing,
      $sel:marketplace:ReservedInstancesOffering' :: Maybe Bool
marketplace = forall a. Maybe a
Prelude.Nothing,
      $sel:offeringClass:ReservedInstancesOffering' :: Maybe OfferingClassType
offeringClass = forall a. Maybe a
Prelude.Nothing,
      $sel:offeringType:ReservedInstancesOffering' :: Maybe OfferingTypeValues
offeringType = forall a. Maybe a
Prelude.Nothing,
      $sel:pricingDetails:ReservedInstancesOffering' :: Maybe [PricingDetail]
pricingDetails = forall a. Maybe a
Prelude.Nothing,
      $sel:productDescription:ReservedInstancesOffering' :: Maybe RIProductDescription
productDescription = forall a. Maybe a
Prelude.Nothing,
      $sel:recurringCharges:ReservedInstancesOffering' :: Maybe [RecurringCharge]
recurringCharges = forall a. Maybe a
Prelude.Nothing,
      $sel:reservedInstancesOfferingId:ReservedInstancesOffering' :: Maybe Text
reservedInstancesOfferingId = forall a. Maybe a
Prelude.Nothing,
      $sel:scope:ReservedInstancesOffering' :: Maybe Scope
scope = forall a. Maybe a
Prelude.Nothing,
      $sel:usagePrice:ReservedInstancesOffering' :: Maybe Double
usagePrice = forall a. Maybe a
Prelude.Nothing
    }

-- | The Availability Zone in which the Reserved Instance can be used.
reservedInstancesOffering_availabilityZone :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Text)
reservedInstancesOffering_availabilityZone :: Lens' ReservedInstancesOffering (Maybe Text)
reservedInstancesOffering_availabilityZone = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe Text
availabilityZone :: Maybe Text
$sel:availabilityZone:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Text
availabilityZone} -> Maybe Text
availabilityZone) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe Text
a -> ReservedInstancesOffering
s {$sel:availabilityZone:ReservedInstancesOffering' :: Maybe Text
availabilityZone = Maybe Text
a} :: ReservedInstancesOffering)

-- | The currency of the Reserved Instance offering you are purchasing. It\'s
-- specified using ISO 4217 standard currency codes. At this time, the only
-- supported currency is @USD@.
reservedInstancesOffering_currencyCode :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe CurrencyCodeValues)
reservedInstancesOffering_currencyCode :: Lens' ReservedInstancesOffering (Maybe CurrencyCodeValues)
reservedInstancesOffering_currencyCode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe CurrencyCodeValues
currencyCode :: Maybe CurrencyCodeValues
$sel:currencyCode:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe CurrencyCodeValues
currencyCode} -> Maybe CurrencyCodeValues
currencyCode) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe CurrencyCodeValues
a -> ReservedInstancesOffering
s {$sel:currencyCode:ReservedInstancesOffering' :: Maybe CurrencyCodeValues
currencyCode = Maybe CurrencyCodeValues
a} :: ReservedInstancesOffering)

-- | The duration of the Reserved Instance, in seconds.
reservedInstancesOffering_duration :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Integer)
reservedInstancesOffering_duration :: Lens' ReservedInstancesOffering (Maybe Integer)
reservedInstancesOffering_duration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe Integer
duration :: Maybe Integer
$sel:duration:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Integer
duration} -> Maybe Integer
duration) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe Integer
a -> ReservedInstancesOffering
s {$sel:duration:ReservedInstancesOffering' :: Maybe Integer
duration = Maybe Integer
a} :: ReservedInstancesOffering)

-- | The purchase price of the Reserved Instance.
reservedInstancesOffering_fixedPrice :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Double)
reservedInstancesOffering_fixedPrice :: Lens' ReservedInstancesOffering (Maybe Double)
reservedInstancesOffering_fixedPrice = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe Double
fixedPrice :: Maybe Double
$sel:fixedPrice:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Double
fixedPrice} -> Maybe Double
fixedPrice) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe Double
a -> ReservedInstancesOffering
s {$sel:fixedPrice:ReservedInstancesOffering' :: Maybe Double
fixedPrice = Maybe Double
a} :: ReservedInstancesOffering)

-- | The tenancy of the instance.
reservedInstancesOffering_instanceTenancy :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Tenancy)
reservedInstancesOffering_instanceTenancy :: Lens' ReservedInstancesOffering (Maybe Tenancy)
reservedInstancesOffering_instanceTenancy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe Tenancy
instanceTenancy :: Maybe Tenancy
$sel:instanceTenancy:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Tenancy
instanceTenancy} -> Maybe Tenancy
instanceTenancy) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe Tenancy
a -> ReservedInstancesOffering
s {$sel:instanceTenancy:ReservedInstancesOffering' :: Maybe Tenancy
instanceTenancy = Maybe Tenancy
a} :: ReservedInstancesOffering)

-- | The instance type on which the Reserved Instance can be used.
reservedInstancesOffering_instanceType :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe InstanceType)
reservedInstancesOffering_instanceType :: Lens' ReservedInstancesOffering (Maybe InstanceType)
reservedInstancesOffering_instanceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe InstanceType
instanceType :: Maybe InstanceType
$sel:instanceType:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe InstanceType
instanceType} -> Maybe InstanceType
instanceType) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe InstanceType
a -> ReservedInstancesOffering
s {$sel:instanceType:ReservedInstancesOffering' :: Maybe InstanceType
instanceType = Maybe InstanceType
a} :: ReservedInstancesOffering)

-- | Indicates whether the offering is available through the Reserved
-- Instance Marketplace (resale) or Amazon Web Services. If it\'s a
-- Reserved Instance Marketplace offering, this is @true@.
reservedInstancesOffering_marketplace :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Bool)
reservedInstancesOffering_marketplace :: Lens' ReservedInstancesOffering (Maybe Bool)
reservedInstancesOffering_marketplace = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe Bool
marketplace :: Maybe Bool
$sel:marketplace:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Bool
marketplace} -> Maybe Bool
marketplace) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe Bool
a -> ReservedInstancesOffering
s {$sel:marketplace:ReservedInstancesOffering' :: Maybe Bool
marketplace = Maybe Bool
a} :: ReservedInstancesOffering)

-- | If @convertible@ it can be exchanged for Reserved Instances of the same
-- or higher monetary value, with different configurations. If @standard@,
-- it is not possible to perform an exchange.
reservedInstancesOffering_offeringClass :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe OfferingClassType)
reservedInstancesOffering_offeringClass :: Lens' ReservedInstancesOffering (Maybe OfferingClassType)
reservedInstancesOffering_offeringClass = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe OfferingClassType
offeringClass :: Maybe OfferingClassType
$sel:offeringClass:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe OfferingClassType
offeringClass} -> Maybe OfferingClassType
offeringClass) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe OfferingClassType
a -> ReservedInstancesOffering
s {$sel:offeringClass:ReservedInstancesOffering' :: Maybe OfferingClassType
offeringClass = Maybe OfferingClassType
a} :: ReservedInstancesOffering)

-- | The Reserved Instance offering type.
reservedInstancesOffering_offeringType :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe OfferingTypeValues)
reservedInstancesOffering_offeringType :: Lens' ReservedInstancesOffering (Maybe OfferingTypeValues)
reservedInstancesOffering_offeringType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe OfferingTypeValues
offeringType :: Maybe OfferingTypeValues
$sel:offeringType:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe OfferingTypeValues
offeringType} -> Maybe OfferingTypeValues
offeringType) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe OfferingTypeValues
a -> ReservedInstancesOffering
s {$sel:offeringType:ReservedInstancesOffering' :: Maybe OfferingTypeValues
offeringType = Maybe OfferingTypeValues
a} :: ReservedInstancesOffering)

-- | The pricing details of the Reserved Instance offering.
reservedInstancesOffering_pricingDetails :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe [PricingDetail])
reservedInstancesOffering_pricingDetails :: Lens' ReservedInstancesOffering (Maybe [PricingDetail])
reservedInstancesOffering_pricingDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe [PricingDetail]
pricingDetails :: Maybe [PricingDetail]
$sel:pricingDetails:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe [PricingDetail]
pricingDetails} -> Maybe [PricingDetail]
pricingDetails) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe [PricingDetail]
a -> ReservedInstancesOffering
s {$sel:pricingDetails:ReservedInstancesOffering' :: Maybe [PricingDetail]
pricingDetails = Maybe [PricingDetail]
a} :: ReservedInstancesOffering) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The Reserved Instance product platform description.
reservedInstancesOffering_productDescription :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe RIProductDescription)
reservedInstancesOffering_productDescription :: Lens' ReservedInstancesOffering (Maybe RIProductDescription)
reservedInstancesOffering_productDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe RIProductDescription
productDescription :: Maybe RIProductDescription
$sel:productDescription:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe RIProductDescription
productDescription} -> Maybe RIProductDescription
productDescription) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe RIProductDescription
a -> ReservedInstancesOffering
s {$sel:productDescription:ReservedInstancesOffering' :: Maybe RIProductDescription
productDescription = Maybe RIProductDescription
a} :: ReservedInstancesOffering)

-- | The recurring charge tag assigned to the resource.
reservedInstancesOffering_recurringCharges :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe [RecurringCharge])
reservedInstancesOffering_recurringCharges :: Lens' ReservedInstancesOffering (Maybe [RecurringCharge])
reservedInstancesOffering_recurringCharges = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe [RecurringCharge]
recurringCharges :: Maybe [RecurringCharge]
$sel:recurringCharges:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe [RecurringCharge]
recurringCharges} -> Maybe [RecurringCharge]
recurringCharges) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe [RecurringCharge]
a -> ReservedInstancesOffering
s {$sel:recurringCharges:ReservedInstancesOffering' :: Maybe [RecurringCharge]
recurringCharges = Maybe [RecurringCharge]
a} :: ReservedInstancesOffering) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The ID of the Reserved Instance offering. This is the offering ID used
-- in GetReservedInstancesExchangeQuote to confirm that an exchange can be
-- made.
reservedInstancesOffering_reservedInstancesOfferingId :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Text)
reservedInstancesOffering_reservedInstancesOfferingId :: Lens' ReservedInstancesOffering (Maybe Text)
reservedInstancesOffering_reservedInstancesOfferingId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe Text
reservedInstancesOfferingId :: Maybe Text
$sel:reservedInstancesOfferingId:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Text
reservedInstancesOfferingId} -> Maybe Text
reservedInstancesOfferingId) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe Text
a -> ReservedInstancesOffering
s {$sel:reservedInstancesOfferingId:ReservedInstancesOffering' :: Maybe Text
reservedInstancesOfferingId = Maybe Text
a} :: ReservedInstancesOffering)

-- | Whether the Reserved Instance is applied to instances in a Region or an
-- Availability Zone.
reservedInstancesOffering_scope :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Scope)
reservedInstancesOffering_scope :: Lens' ReservedInstancesOffering (Maybe Scope)
reservedInstancesOffering_scope = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe Scope
scope :: Maybe Scope
$sel:scope:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Scope
scope} -> Maybe Scope
scope) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe Scope
a -> ReservedInstancesOffering
s {$sel:scope:ReservedInstancesOffering' :: Maybe Scope
scope = Maybe Scope
a} :: ReservedInstancesOffering)

-- | The usage price of the Reserved Instance, per hour.
reservedInstancesOffering_usagePrice :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Double)
reservedInstancesOffering_usagePrice :: Lens' ReservedInstancesOffering (Maybe Double)
reservedInstancesOffering_usagePrice = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ReservedInstancesOffering' {Maybe Double
usagePrice :: Maybe Double
$sel:usagePrice:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Double
usagePrice} -> Maybe Double
usagePrice) (\s :: ReservedInstancesOffering
s@ReservedInstancesOffering' {} Maybe Double
a -> ReservedInstancesOffering
s {$sel:usagePrice:ReservedInstancesOffering' :: Maybe Double
usagePrice = Maybe Double
a} :: ReservedInstancesOffering)

instance Data.FromXML ReservedInstancesOffering where
  parseXML :: [Node] -> Either String ReservedInstancesOffering
parseXML [Node]
x =
    Maybe Text
-> Maybe CurrencyCodeValues
-> Maybe Integer
-> Maybe Double
-> Maybe Tenancy
-> Maybe InstanceType
-> Maybe Bool
-> Maybe OfferingClassType
-> Maybe OfferingTypeValues
-> Maybe [PricingDetail]
-> Maybe RIProductDescription
-> Maybe [RecurringCharge]
-> Maybe Text
-> Maybe Scope
-> Maybe Double
-> ReservedInstancesOffering
ReservedInstancesOffering'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"availabilityZone")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"currencyCode")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"duration")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"fixedPrice")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"instanceTenancy")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"instanceType")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"marketplace")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"offeringClass")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"offeringType")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"pricingDetailsSet"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"item")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"productDescription")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"recurringCharges"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"item")
                  )
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"reservedInstancesOfferingId")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"scope")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"usagePrice")

instance Prelude.Hashable ReservedInstancesOffering where
  hashWithSalt :: Int -> ReservedInstancesOffering -> Int
hashWithSalt Int
_salt ReservedInstancesOffering' {Maybe Bool
Maybe Double
Maybe Integer
Maybe [PricingDetail]
Maybe [RecurringCharge]
Maybe Text
Maybe CurrencyCodeValues
Maybe InstanceType
Maybe OfferingClassType
Maybe OfferingTypeValues
Maybe RIProductDescription
Maybe Scope
Maybe Tenancy
usagePrice :: Maybe Double
scope :: Maybe Scope
reservedInstancesOfferingId :: Maybe Text
recurringCharges :: Maybe [RecurringCharge]
productDescription :: Maybe RIProductDescription
pricingDetails :: Maybe [PricingDetail]
offeringType :: Maybe OfferingTypeValues
offeringClass :: Maybe OfferingClassType
marketplace :: Maybe Bool
instanceType :: Maybe InstanceType
instanceTenancy :: Maybe Tenancy
fixedPrice :: Maybe Double
duration :: Maybe Integer
currencyCode :: Maybe CurrencyCodeValues
availabilityZone :: Maybe Text
$sel:usagePrice:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Double
$sel:scope:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Scope
$sel:reservedInstancesOfferingId:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Text
$sel:recurringCharges:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe [RecurringCharge]
$sel:productDescription:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe RIProductDescription
$sel:pricingDetails:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe [PricingDetail]
$sel:offeringType:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe OfferingTypeValues
$sel:offeringClass:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe OfferingClassType
$sel:marketplace:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Bool
$sel:instanceType:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe InstanceType
$sel:instanceTenancy:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Tenancy
$sel:fixedPrice:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Double
$sel:duration:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Integer
$sel:currencyCode:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe CurrencyCodeValues
$sel:availabilityZone:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
availabilityZone
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CurrencyCodeValues
currencyCode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
duration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Double
fixedPrice
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Tenancy
instanceTenancy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe InstanceType
instanceType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
marketplace
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe OfferingClassType
offeringClass
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe OfferingTypeValues
offeringType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [PricingDetail]
pricingDetails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RIProductDescription
productDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [RecurringCharge]
recurringCharges
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
reservedInstancesOfferingId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Scope
scope
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Double
usagePrice

instance Prelude.NFData ReservedInstancesOffering where
  rnf :: ReservedInstancesOffering -> ()
rnf ReservedInstancesOffering' {Maybe Bool
Maybe Double
Maybe Integer
Maybe [PricingDetail]
Maybe [RecurringCharge]
Maybe Text
Maybe CurrencyCodeValues
Maybe InstanceType
Maybe OfferingClassType
Maybe OfferingTypeValues
Maybe RIProductDescription
Maybe Scope
Maybe Tenancy
usagePrice :: Maybe Double
scope :: Maybe Scope
reservedInstancesOfferingId :: Maybe Text
recurringCharges :: Maybe [RecurringCharge]
productDescription :: Maybe RIProductDescription
pricingDetails :: Maybe [PricingDetail]
offeringType :: Maybe OfferingTypeValues
offeringClass :: Maybe OfferingClassType
marketplace :: Maybe Bool
instanceType :: Maybe InstanceType
instanceTenancy :: Maybe Tenancy
fixedPrice :: Maybe Double
duration :: Maybe Integer
currencyCode :: Maybe CurrencyCodeValues
availabilityZone :: Maybe Text
$sel:usagePrice:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Double
$sel:scope:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Scope
$sel:reservedInstancesOfferingId:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Text
$sel:recurringCharges:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe [RecurringCharge]
$sel:productDescription:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe RIProductDescription
$sel:pricingDetails:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe [PricingDetail]
$sel:offeringType:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe OfferingTypeValues
$sel:offeringClass:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe OfferingClassType
$sel:marketplace:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Bool
$sel:instanceType:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe InstanceType
$sel:instanceTenancy:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Tenancy
$sel:fixedPrice:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Double
$sel:duration:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Integer
$sel:currencyCode:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe CurrencyCodeValues
$sel:availabilityZone:ReservedInstancesOffering' :: ReservedInstancesOffering -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
availabilityZone
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe CurrencyCodeValues
currencyCode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
duration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Double
fixedPrice
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Tenancy
instanceTenancy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe InstanceType
instanceType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
marketplace
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe OfferingClassType
offeringClass
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe OfferingTypeValues
offeringType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [PricingDetail]
pricingDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RIProductDescription
productDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [RecurringCharge]
recurringCharges
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
reservedInstancesOfferingId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Scope
scope
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Double
usagePrice