{-# 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.SpotFleetRequestConfig
-- 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.SpotFleetRequestConfig 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.ActivityStatus
import Amazonka.EC2.Types.BatchState
import Amazonka.EC2.Types.SpotFleetRequestConfigData
import Amazonka.EC2.Types.Tag
import qualified Amazonka.Prelude as Prelude

-- | Describes a Spot Fleet request.
--
-- /See:/ 'newSpotFleetRequestConfig' smart constructor.
data SpotFleetRequestConfig = SpotFleetRequestConfig'
  { -- | The progress of the Spot Fleet request. If there is an error, the status
    -- is @error@. After all requests are placed, the status is
    -- @pending_fulfillment@. If the size of the fleet is equal to or greater
    -- than its target capacity, the status is @fulfilled@. If the size of the
    -- fleet is decreased, the status is @pending_termination@ while Spot
    -- Instances are terminating.
    SpotFleetRequestConfig -> Maybe ActivityStatus
activityStatus :: Prelude.Maybe ActivityStatus,
    -- | The creation date and time of the request.
    SpotFleetRequestConfig -> Maybe ISO8601
createTime :: Prelude.Maybe Data.ISO8601,
    -- | The configuration of the Spot Fleet request.
    SpotFleetRequestConfig -> Maybe SpotFleetRequestConfigData
spotFleetRequestConfig :: Prelude.Maybe SpotFleetRequestConfigData,
    -- | The ID of the Spot Fleet request.
    SpotFleetRequestConfig -> Maybe Text
spotFleetRequestId :: Prelude.Maybe Prelude.Text,
    -- | The state of the Spot Fleet request.
    SpotFleetRequestConfig -> Maybe BatchState
spotFleetRequestState :: Prelude.Maybe BatchState,
    -- | The tags for a Spot Fleet resource.
    SpotFleetRequestConfig -> Maybe [Tag]
tags :: Prelude.Maybe [Tag]
  }
  deriving (SpotFleetRequestConfig -> SpotFleetRequestConfig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SpotFleetRequestConfig -> SpotFleetRequestConfig -> Bool
$c/= :: SpotFleetRequestConfig -> SpotFleetRequestConfig -> Bool
== :: SpotFleetRequestConfig -> SpotFleetRequestConfig -> Bool
$c== :: SpotFleetRequestConfig -> SpotFleetRequestConfig -> Bool
Prelude.Eq, ReadPrec [SpotFleetRequestConfig]
ReadPrec SpotFleetRequestConfig
Int -> ReadS SpotFleetRequestConfig
ReadS [SpotFleetRequestConfig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SpotFleetRequestConfig]
$creadListPrec :: ReadPrec [SpotFleetRequestConfig]
readPrec :: ReadPrec SpotFleetRequestConfig
$creadPrec :: ReadPrec SpotFleetRequestConfig
readList :: ReadS [SpotFleetRequestConfig]
$creadList :: ReadS [SpotFleetRequestConfig]
readsPrec :: Int -> ReadS SpotFleetRequestConfig
$creadsPrec :: Int -> ReadS SpotFleetRequestConfig
Prelude.Read, Int -> SpotFleetRequestConfig -> ShowS
[SpotFleetRequestConfig] -> ShowS
SpotFleetRequestConfig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SpotFleetRequestConfig] -> ShowS
$cshowList :: [SpotFleetRequestConfig] -> ShowS
show :: SpotFleetRequestConfig -> String
$cshow :: SpotFleetRequestConfig -> String
showsPrec :: Int -> SpotFleetRequestConfig -> ShowS
$cshowsPrec :: Int -> SpotFleetRequestConfig -> ShowS
Prelude.Show, forall x. Rep SpotFleetRequestConfig x -> SpotFleetRequestConfig
forall x. SpotFleetRequestConfig -> Rep SpotFleetRequestConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SpotFleetRequestConfig x -> SpotFleetRequestConfig
$cfrom :: forall x. SpotFleetRequestConfig -> Rep SpotFleetRequestConfig x
Prelude.Generic)

-- |
-- Create a value of 'SpotFleetRequestConfig' 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:
--
-- 'activityStatus', 'spotFleetRequestConfig_activityStatus' - The progress of the Spot Fleet request. If there is an error, the status
-- is @error@. After all requests are placed, the status is
-- @pending_fulfillment@. If the size of the fleet is equal to or greater
-- than its target capacity, the status is @fulfilled@. If the size of the
-- fleet is decreased, the status is @pending_termination@ while Spot
-- Instances are terminating.
--
-- 'createTime', 'spotFleetRequestConfig_createTime' - The creation date and time of the request.
--
-- 'spotFleetRequestConfig', 'spotFleetRequestConfig_spotFleetRequestConfig' - The configuration of the Spot Fleet request.
--
-- 'spotFleetRequestId', 'spotFleetRequestConfig_spotFleetRequestId' - The ID of the Spot Fleet request.
--
-- 'spotFleetRequestState', 'spotFleetRequestConfig_spotFleetRequestState' - The state of the Spot Fleet request.
--
-- 'tags', 'spotFleetRequestConfig_tags' - The tags for a Spot Fleet resource.
newSpotFleetRequestConfig ::
  SpotFleetRequestConfig
newSpotFleetRequestConfig :: SpotFleetRequestConfig
newSpotFleetRequestConfig =
  SpotFleetRequestConfig'
    { $sel:activityStatus:SpotFleetRequestConfig' :: Maybe ActivityStatus
activityStatus =
        forall a. Maybe a
Prelude.Nothing,
      $sel:createTime:SpotFleetRequestConfig' :: Maybe ISO8601
createTime = forall a. Maybe a
Prelude.Nothing,
      $sel:spotFleetRequestConfig:SpotFleetRequestConfig' :: Maybe SpotFleetRequestConfigData
spotFleetRequestConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:spotFleetRequestId:SpotFleetRequestConfig' :: Maybe Text
spotFleetRequestId = forall a. Maybe a
Prelude.Nothing,
      $sel:spotFleetRequestState:SpotFleetRequestConfig' :: Maybe BatchState
spotFleetRequestState = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:SpotFleetRequestConfig' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing
    }

-- | The progress of the Spot Fleet request. If there is an error, the status
-- is @error@. After all requests are placed, the status is
-- @pending_fulfillment@. If the size of the fleet is equal to or greater
-- than its target capacity, the status is @fulfilled@. If the size of the
-- fleet is decreased, the status is @pending_termination@ while Spot
-- Instances are terminating.
spotFleetRequestConfig_activityStatus :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe ActivityStatus)
spotFleetRequestConfig_activityStatus :: Lens' SpotFleetRequestConfig (Maybe ActivityStatus)
spotFleetRequestConfig_activityStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SpotFleetRequestConfig' {Maybe ActivityStatus
activityStatus :: Maybe ActivityStatus
$sel:activityStatus:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe ActivityStatus
activityStatus} -> Maybe ActivityStatus
activityStatus) (\s :: SpotFleetRequestConfig
s@SpotFleetRequestConfig' {} Maybe ActivityStatus
a -> SpotFleetRequestConfig
s {$sel:activityStatus:SpotFleetRequestConfig' :: Maybe ActivityStatus
activityStatus = Maybe ActivityStatus
a} :: SpotFleetRequestConfig)

-- | The creation date and time of the request.
spotFleetRequestConfig_createTime :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe Prelude.UTCTime)
spotFleetRequestConfig_createTime :: Lens' SpotFleetRequestConfig (Maybe UTCTime)
spotFleetRequestConfig_createTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SpotFleetRequestConfig' {Maybe ISO8601
createTime :: Maybe ISO8601
$sel:createTime:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe ISO8601
createTime} -> Maybe ISO8601
createTime) (\s :: SpotFleetRequestConfig
s@SpotFleetRequestConfig' {} Maybe ISO8601
a -> SpotFleetRequestConfig
s {$sel:createTime:SpotFleetRequestConfig' :: Maybe ISO8601
createTime = Maybe ISO8601
a} :: SpotFleetRequestConfig) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The configuration of the Spot Fleet request.
spotFleetRequestConfig_spotFleetRequestConfig :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe SpotFleetRequestConfigData)
spotFleetRequestConfig_spotFleetRequestConfig :: Lens' SpotFleetRequestConfig (Maybe SpotFleetRequestConfigData)
spotFleetRequestConfig_spotFleetRequestConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SpotFleetRequestConfig' {Maybe SpotFleetRequestConfigData
spotFleetRequestConfig :: Maybe SpotFleetRequestConfigData
$sel:spotFleetRequestConfig:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe SpotFleetRequestConfigData
spotFleetRequestConfig} -> Maybe SpotFleetRequestConfigData
spotFleetRequestConfig) (\s :: SpotFleetRequestConfig
s@SpotFleetRequestConfig' {} Maybe SpotFleetRequestConfigData
a -> SpotFleetRequestConfig
s {$sel:spotFleetRequestConfig:SpotFleetRequestConfig' :: Maybe SpotFleetRequestConfigData
spotFleetRequestConfig = Maybe SpotFleetRequestConfigData
a} :: SpotFleetRequestConfig)

-- | The ID of the Spot Fleet request.
spotFleetRequestConfig_spotFleetRequestId :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe Prelude.Text)
spotFleetRequestConfig_spotFleetRequestId :: Lens' SpotFleetRequestConfig (Maybe Text)
spotFleetRequestConfig_spotFleetRequestId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SpotFleetRequestConfig' {Maybe Text
spotFleetRequestId :: Maybe Text
$sel:spotFleetRequestId:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe Text
spotFleetRequestId} -> Maybe Text
spotFleetRequestId) (\s :: SpotFleetRequestConfig
s@SpotFleetRequestConfig' {} Maybe Text
a -> SpotFleetRequestConfig
s {$sel:spotFleetRequestId:SpotFleetRequestConfig' :: Maybe Text
spotFleetRequestId = Maybe Text
a} :: SpotFleetRequestConfig)

-- | The state of the Spot Fleet request.
spotFleetRequestConfig_spotFleetRequestState :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe BatchState)
spotFleetRequestConfig_spotFleetRequestState :: Lens' SpotFleetRequestConfig (Maybe BatchState)
spotFleetRequestConfig_spotFleetRequestState = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SpotFleetRequestConfig' {Maybe BatchState
spotFleetRequestState :: Maybe BatchState
$sel:spotFleetRequestState:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe BatchState
spotFleetRequestState} -> Maybe BatchState
spotFleetRequestState) (\s :: SpotFleetRequestConfig
s@SpotFleetRequestConfig' {} Maybe BatchState
a -> SpotFleetRequestConfig
s {$sel:spotFleetRequestState:SpotFleetRequestConfig' :: Maybe BatchState
spotFleetRequestState = Maybe BatchState
a} :: SpotFleetRequestConfig)

-- | The tags for a Spot Fleet resource.
spotFleetRequestConfig_tags :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe [Tag])
spotFleetRequestConfig_tags :: Lens' SpotFleetRequestConfig (Maybe [Tag])
spotFleetRequestConfig_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SpotFleetRequestConfig' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: SpotFleetRequestConfig
s@SpotFleetRequestConfig' {} Maybe [Tag]
a -> SpotFleetRequestConfig
s {$sel:tags:SpotFleetRequestConfig' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: SpotFleetRequestConfig) 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

instance Data.FromXML SpotFleetRequestConfig where
  parseXML :: [Node] -> Either String SpotFleetRequestConfig
parseXML [Node]
x =
    Maybe ActivityStatus
-> Maybe ISO8601
-> Maybe SpotFleetRequestConfigData
-> Maybe Text
-> Maybe BatchState
-> Maybe [Tag]
-> SpotFleetRequestConfig
SpotFleetRequestConfig'
      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
"activityStatus")
      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
"createTime")
      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
"spotFleetRequestConfig")
      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
"spotFleetRequestId")
      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
"spotFleetRequestState")
      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
"tagSet"
                      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")
                  )

instance Prelude.Hashable SpotFleetRequestConfig where
  hashWithSalt :: Int -> SpotFleetRequestConfig -> Int
hashWithSalt Int
_salt SpotFleetRequestConfig' {Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe ActivityStatus
Maybe BatchState
Maybe SpotFleetRequestConfigData
tags :: Maybe [Tag]
spotFleetRequestState :: Maybe BatchState
spotFleetRequestId :: Maybe Text
spotFleetRequestConfig :: Maybe SpotFleetRequestConfigData
createTime :: Maybe ISO8601
activityStatus :: Maybe ActivityStatus
$sel:tags:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe [Tag]
$sel:spotFleetRequestState:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe BatchState
$sel:spotFleetRequestId:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe Text
$sel:spotFleetRequestConfig:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe SpotFleetRequestConfigData
$sel:createTime:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe ISO8601
$sel:activityStatus:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe ActivityStatus
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ActivityStatus
activityStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ISO8601
createTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SpotFleetRequestConfigData
spotFleetRequestConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
spotFleetRequestId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe BatchState
spotFleetRequestState
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags

instance Prelude.NFData SpotFleetRequestConfig where
  rnf :: SpotFleetRequestConfig -> ()
rnf SpotFleetRequestConfig' {Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe ActivityStatus
Maybe BatchState
Maybe SpotFleetRequestConfigData
tags :: Maybe [Tag]
spotFleetRequestState :: Maybe BatchState
spotFleetRequestId :: Maybe Text
spotFleetRequestConfig :: Maybe SpotFleetRequestConfigData
createTime :: Maybe ISO8601
activityStatus :: Maybe ActivityStatus
$sel:tags:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe [Tag]
$sel:spotFleetRequestState:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe BatchState
$sel:spotFleetRequestId:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe Text
$sel:spotFleetRequestConfig:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe SpotFleetRequestConfigData
$sel:createTime:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe ISO8601
$sel:activityStatus:SpotFleetRequestConfig' :: SpotFleetRequestConfig -> Maybe ActivityStatus
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ActivityStatus
activityStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ISO8601
createTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SpotFleetRequestConfigData
spotFleetRequestConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
spotFleetRequestId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe BatchState
spotFleetRequestState
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags