{-# 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.InstanceMarketOptionsRequest
-- 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.InstanceMarketOptionsRequest 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.MarketType
import Amazonka.EC2.Types.SpotMarketOptions
import qualified Amazonka.Prelude as Prelude

-- | Describes the market (purchasing) option for the instances.
--
-- /See:/ 'newInstanceMarketOptionsRequest' smart constructor.
data InstanceMarketOptionsRequest = InstanceMarketOptionsRequest'
  { -- | The market type.
    InstanceMarketOptionsRequest -> Maybe MarketType
marketType :: Prelude.Maybe MarketType,
    -- | The options for Spot Instances.
    InstanceMarketOptionsRequest -> Maybe SpotMarketOptions
spotOptions :: Prelude.Maybe SpotMarketOptions
  }
  deriving (InstanceMarketOptionsRequest
-> InstanceMarketOptionsRequest -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: InstanceMarketOptionsRequest
-> InstanceMarketOptionsRequest -> Bool
$c/= :: InstanceMarketOptionsRequest
-> InstanceMarketOptionsRequest -> Bool
== :: InstanceMarketOptionsRequest
-> InstanceMarketOptionsRequest -> Bool
$c== :: InstanceMarketOptionsRequest
-> InstanceMarketOptionsRequest -> Bool
Prelude.Eq, ReadPrec [InstanceMarketOptionsRequest]
ReadPrec InstanceMarketOptionsRequest
Int -> ReadS InstanceMarketOptionsRequest
ReadS [InstanceMarketOptionsRequest]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [InstanceMarketOptionsRequest]
$creadListPrec :: ReadPrec [InstanceMarketOptionsRequest]
readPrec :: ReadPrec InstanceMarketOptionsRequest
$creadPrec :: ReadPrec InstanceMarketOptionsRequest
readList :: ReadS [InstanceMarketOptionsRequest]
$creadList :: ReadS [InstanceMarketOptionsRequest]
readsPrec :: Int -> ReadS InstanceMarketOptionsRequest
$creadsPrec :: Int -> ReadS InstanceMarketOptionsRequest
Prelude.Read, Int -> InstanceMarketOptionsRequest -> ShowS
[InstanceMarketOptionsRequest] -> ShowS
InstanceMarketOptionsRequest -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [InstanceMarketOptionsRequest] -> ShowS
$cshowList :: [InstanceMarketOptionsRequest] -> ShowS
show :: InstanceMarketOptionsRequest -> String
$cshow :: InstanceMarketOptionsRequest -> String
showsPrec :: Int -> InstanceMarketOptionsRequest -> ShowS
$cshowsPrec :: Int -> InstanceMarketOptionsRequest -> ShowS
Prelude.Show, forall x.
Rep InstanceMarketOptionsRequest x -> InstanceMarketOptionsRequest
forall x.
InstanceMarketOptionsRequest -> Rep InstanceMarketOptionsRequest x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep InstanceMarketOptionsRequest x -> InstanceMarketOptionsRequest
$cfrom :: forall x.
InstanceMarketOptionsRequest -> Rep InstanceMarketOptionsRequest x
Prelude.Generic)

-- |
-- Create a value of 'InstanceMarketOptionsRequest' 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:
--
-- 'marketType', 'instanceMarketOptionsRequest_marketType' - The market type.
--
-- 'spotOptions', 'instanceMarketOptionsRequest_spotOptions' - The options for Spot Instances.
newInstanceMarketOptionsRequest ::
  InstanceMarketOptionsRequest
newInstanceMarketOptionsRequest :: InstanceMarketOptionsRequest
newInstanceMarketOptionsRequest =
  InstanceMarketOptionsRequest'
    { $sel:marketType:InstanceMarketOptionsRequest' :: Maybe MarketType
marketType =
        forall a. Maybe a
Prelude.Nothing,
      $sel:spotOptions:InstanceMarketOptionsRequest' :: Maybe SpotMarketOptions
spotOptions = forall a. Maybe a
Prelude.Nothing
    }

-- | The market type.
instanceMarketOptionsRequest_marketType :: Lens.Lens' InstanceMarketOptionsRequest (Prelude.Maybe MarketType)
instanceMarketOptionsRequest_marketType :: Lens' InstanceMarketOptionsRequest (Maybe MarketType)
instanceMarketOptionsRequest_marketType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceMarketOptionsRequest' {Maybe MarketType
marketType :: Maybe MarketType
$sel:marketType:InstanceMarketOptionsRequest' :: InstanceMarketOptionsRequest -> Maybe MarketType
marketType} -> Maybe MarketType
marketType) (\s :: InstanceMarketOptionsRequest
s@InstanceMarketOptionsRequest' {} Maybe MarketType
a -> InstanceMarketOptionsRequest
s {$sel:marketType:InstanceMarketOptionsRequest' :: Maybe MarketType
marketType = Maybe MarketType
a} :: InstanceMarketOptionsRequest)

-- | The options for Spot Instances.
instanceMarketOptionsRequest_spotOptions :: Lens.Lens' InstanceMarketOptionsRequest (Prelude.Maybe SpotMarketOptions)
instanceMarketOptionsRequest_spotOptions :: Lens' InstanceMarketOptionsRequest (Maybe SpotMarketOptions)
instanceMarketOptionsRequest_spotOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceMarketOptionsRequest' {Maybe SpotMarketOptions
spotOptions :: Maybe SpotMarketOptions
$sel:spotOptions:InstanceMarketOptionsRequest' :: InstanceMarketOptionsRequest -> Maybe SpotMarketOptions
spotOptions} -> Maybe SpotMarketOptions
spotOptions) (\s :: InstanceMarketOptionsRequest
s@InstanceMarketOptionsRequest' {} Maybe SpotMarketOptions
a -> InstanceMarketOptionsRequest
s {$sel:spotOptions:InstanceMarketOptionsRequest' :: Maybe SpotMarketOptions
spotOptions = Maybe SpotMarketOptions
a} :: InstanceMarketOptionsRequest)

instance
  Prelude.Hashable
    InstanceMarketOptionsRequest
  where
  hashWithSalt :: Int -> InstanceMarketOptionsRequest -> Int
hashWithSalt Int
_salt InstanceMarketOptionsRequest' {Maybe MarketType
Maybe SpotMarketOptions
spotOptions :: Maybe SpotMarketOptions
marketType :: Maybe MarketType
$sel:spotOptions:InstanceMarketOptionsRequest' :: InstanceMarketOptionsRequest -> Maybe SpotMarketOptions
$sel:marketType:InstanceMarketOptionsRequest' :: InstanceMarketOptionsRequest -> Maybe MarketType
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MarketType
marketType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SpotMarketOptions
spotOptions

instance Prelude.NFData InstanceMarketOptionsRequest where
  rnf :: InstanceMarketOptionsRequest -> ()
rnf InstanceMarketOptionsRequest' {Maybe MarketType
Maybe SpotMarketOptions
spotOptions :: Maybe SpotMarketOptions
marketType :: Maybe MarketType
$sel:spotOptions:InstanceMarketOptionsRequest' :: InstanceMarketOptionsRequest -> Maybe SpotMarketOptions
$sel:marketType:InstanceMarketOptionsRequest' :: InstanceMarketOptionsRequest -> Maybe MarketType
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe MarketType
marketType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SpotMarketOptions
spotOptions

instance Data.ToQuery InstanceMarketOptionsRequest where
  toQuery :: InstanceMarketOptionsRequest -> QueryString
toQuery InstanceMarketOptionsRequest' {Maybe MarketType
Maybe SpotMarketOptions
spotOptions :: Maybe SpotMarketOptions
marketType :: Maybe MarketType
$sel:spotOptions:InstanceMarketOptionsRequest' :: InstanceMarketOptionsRequest -> Maybe SpotMarketOptions
$sel:marketType:InstanceMarketOptionsRequest' :: InstanceMarketOptionsRequest -> Maybe MarketType
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"MarketType" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe MarketType
marketType,
        ByteString
"SpotOptions" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe SpotMarketOptions
spotOptions
      ]