{-# 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.ElasticGpus
-- 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.ElasticGpus 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.ElasticGpuHealth
import Amazonka.EC2.Types.ElasticGpuState
import Amazonka.EC2.Types.Tag
import qualified Amazonka.Prelude as Prelude

-- | Describes an Elastic Graphics accelerator.
--
-- /See:/ 'newElasticGpus' smart constructor.
data ElasticGpus = ElasticGpus'
  { -- | The Availability Zone in the which the Elastic Graphics accelerator
    -- resides.
    ElasticGpus -> Maybe Text
availabilityZone :: Prelude.Maybe Prelude.Text,
    -- | The status of the Elastic Graphics accelerator.
    ElasticGpus -> Maybe ElasticGpuHealth
elasticGpuHealth :: Prelude.Maybe ElasticGpuHealth,
    -- | The ID of the Elastic Graphics accelerator.
    ElasticGpus -> Maybe Text
elasticGpuId :: Prelude.Maybe Prelude.Text,
    -- | The state of the Elastic Graphics accelerator.
    ElasticGpus -> Maybe ElasticGpuState
elasticGpuState :: Prelude.Maybe ElasticGpuState,
    -- | The type of Elastic Graphics accelerator.
    ElasticGpus -> Maybe Text
elasticGpuType :: Prelude.Maybe Prelude.Text,
    -- | The ID of the instance to which the Elastic Graphics accelerator is
    -- attached.
    ElasticGpus -> Maybe Text
instanceId :: Prelude.Maybe Prelude.Text,
    -- | The tags assigned to the Elastic Graphics accelerator.
    ElasticGpus -> Maybe [Tag]
tags :: Prelude.Maybe [Tag]
  }
  deriving (ElasticGpus -> ElasticGpus -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ElasticGpus -> ElasticGpus -> Bool
$c/= :: ElasticGpus -> ElasticGpus -> Bool
== :: ElasticGpus -> ElasticGpus -> Bool
$c== :: ElasticGpus -> ElasticGpus -> Bool
Prelude.Eq, ReadPrec [ElasticGpus]
ReadPrec ElasticGpus
Int -> ReadS ElasticGpus
ReadS [ElasticGpus]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ElasticGpus]
$creadListPrec :: ReadPrec [ElasticGpus]
readPrec :: ReadPrec ElasticGpus
$creadPrec :: ReadPrec ElasticGpus
readList :: ReadS [ElasticGpus]
$creadList :: ReadS [ElasticGpus]
readsPrec :: Int -> ReadS ElasticGpus
$creadsPrec :: Int -> ReadS ElasticGpus
Prelude.Read, Int -> ElasticGpus -> ShowS
[ElasticGpus] -> ShowS
ElasticGpus -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ElasticGpus] -> ShowS
$cshowList :: [ElasticGpus] -> ShowS
show :: ElasticGpus -> String
$cshow :: ElasticGpus -> String
showsPrec :: Int -> ElasticGpus -> ShowS
$cshowsPrec :: Int -> ElasticGpus -> ShowS
Prelude.Show, forall x. Rep ElasticGpus x -> ElasticGpus
forall x. ElasticGpus -> Rep ElasticGpus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ElasticGpus x -> ElasticGpus
$cfrom :: forall x. ElasticGpus -> Rep ElasticGpus x
Prelude.Generic)

-- |
-- Create a value of 'ElasticGpus' 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', 'elasticGpus_availabilityZone' - The Availability Zone in the which the Elastic Graphics accelerator
-- resides.
--
-- 'elasticGpuHealth', 'elasticGpus_elasticGpuHealth' - The status of the Elastic Graphics accelerator.
--
-- 'elasticGpuId', 'elasticGpus_elasticGpuId' - The ID of the Elastic Graphics accelerator.
--
-- 'elasticGpuState', 'elasticGpus_elasticGpuState' - The state of the Elastic Graphics accelerator.
--
-- 'elasticGpuType', 'elasticGpus_elasticGpuType' - The type of Elastic Graphics accelerator.
--
-- 'instanceId', 'elasticGpus_instanceId' - The ID of the instance to which the Elastic Graphics accelerator is
-- attached.
--
-- 'tags', 'elasticGpus_tags' - The tags assigned to the Elastic Graphics accelerator.
newElasticGpus ::
  ElasticGpus
newElasticGpus :: ElasticGpus
newElasticGpus =
  ElasticGpus'
    { $sel:availabilityZone:ElasticGpus' :: Maybe Text
availabilityZone = forall a. Maybe a
Prelude.Nothing,
      $sel:elasticGpuHealth:ElasticGpus' :: Maybe ElasticGpuHealth
elasticGpuHealth = forall a. Maybe a
Prelude.Nothing,
      $sel:elasticGpuId:ElasticGpus' :: Maybe Text
elasticGpuId = forall a. Maybe a
Prelude.Nothing,
      $sel:elasticGpuState:ElasticGpus' :: Maybe ElasticGpuState
elasticGpuState = forall a. Maybe a
Prelude.Nothing,
      $sel:elasticGpuType:ElasticGpus' :: Maybe Text
elasticGpuType = forall a. Maybe a
Prelude.Nothing,
      $sel:instanceId:ElasticGpus' :: Maybe Text
instanceId = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:ElasticGpus' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing
    }

-- | The Availability Zone in the which the Elastic Graphics accelerator
-- resides.
elasticGpus_availabilityZone :: Lens.Lens' ElasticGpus (Prelude.Maybe Prelude.Text)
elasticGpus_availabilityZone :: Lens' ElasticGpus (Maybe Text)
elasticGpus_availabilityZone = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ElasticGpus' {Maybe Text
availabilityZone :: Maybe Text
$sel:availabilityZone:ElasticGpus' :: ElasticGpus -> Maybe Text
availabilityZone} -> Maybe Text
availabilityZone) (\s :: ElasticGpus
s@ElasticGpus' {} Maybe Text
a -> ElasticGpus
s {$sel:availabilityZone:ElasticGpus' :: Maybe Text
availabilityZone = Maybe Text
a} :: ElasticGpus)

-- | The status of the Elastic Graphics accelerator.
elasticGpus_elasticGpuHealth :: Lens.Lens' ElasticGpus (Prelude.Maybe ElasticGpuHealth)
elasticGpus_elasticGpuHealth :: Lens' ElasticGpus (Maybe ElasticGpuHealth)
elasticGpus_elasticGpuHealth = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ElasticGpus' {Maybe ElasticGpuHealth
elasticGpuHealth :: Maybe ElasticGpuHealth
$sel:elasticGpuHealth:ElasticGpus' :: ElasticGpus -> Maybe ElasticGpuHealth
elasticGpuHealth} -> Maybe ElasticGpuHealth
elasticGpuHealth) (\s :: ElasticGpus
s@ElasticGpus' {} Maybe ElasticGpuHealth
a -> ElasticGpus
s {$sel:elasticGpuHealth:ElasticGpus' :: Maybe ElasticGpuHealth
elasticGpuHealth = Maybe ElasticGpuHealth
a} :: ElasticGpus)

-- | The ID of the Elastic Graphics accelerator.
elasticGpus_elasticGpuId :: Lens.Lens' ElasticGpus (Prelude.Maybe Prelude.Text)
elasticGpus_elasticGpuId :: Lens' ElasticGpus (Maybe Text)
elasticGpus_elasticGpuId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ElasticGpus' {Maybe Text
elasticGpuId :: Maybe Text
$sel:elasticGpuId:ElasticGpus' :: ElasticGpus -> Maybe Text
elasticGpuId} -> Maybe Text
elasticGpuId) (\s :: ElasticGpus
s@ElasticGpus' {} Maybe Text
a -> ElasticGpus
s {$sel:elasticGpuId:ElasticGpus' :: Maybe Text
elasticGpuId = Maybe Text
a} :: ElasticGpus)

-- | The state of the Elastic Graphics accelerator.
elasticGpus_elasticGpuState :: Lens.Lens' ElasticGpus (Prelude.Maybe ElasticGpuState)
elasticGpus_elasticGpuState :: Lens' ElasticGpus (Maybe ElasticGpuState)
elasticGpus_elasticGpuState = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ElasticGpus' {Maybe ElasticGpuState
elasticGpuState :: Maybe ElasticGpuState
$sel:elasticGpuState:ElasticGpus' :: ElasticGpus -> Maybe ElasticGpuState
elasticGpuState} -> Maybe ElasticGpuState
elasticGpuState) (\s :: ElasticGpus
s@ElasticGpus' {} Maybe ElasticGpuState
a -> ElasticGpus
s {$sel:elasticGpuState:ElasticGpus' :: Maybe ElasticGpuState
elasticGpuState = Maybe ElasticGpuState
a} :: ElasticGpus)

-- | The type of Elastic Graphics accelerator.
elasticGpus_elasticGpuType :: Lens.Lens' ElasticGpus (Prelude.Maybe Prelude.Text)
elasticGpus_elasticGpuType :: Lens' ElasticGpus (Maybe Text)
elasticGpus_elasticGpuType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ElasticGpus' {Maybe Text
elasticGpuType :: Maybe Text
$sel:elasticGpuType:ElasticGpus' :: ElasticGpus -> Maybe Text
elasticGpuType} -> Maybe Text
elasticGpuType) (\s :: ElasticGpus
s@ElasticGpus' {} Maybe Text
a -> ElasticGpus
s {$sel:elasticGpuType:ElasticGpus' :: Maybe Text
elasticGpuType = Maybe Text
a} :: ElasticGpus)

-- | The ID of the instance to which the Elastic Graphics accelerator is
-- attached.
elasticGpus_instanceId :: Lens.Lens' ElasticGpus (Prelude.Maybe Prelude.Text)
elasticGpus_instanceId :: Lens' ElasticGpus (Maybe Text)
elasticGpus_instanceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ElasticGpus' {Maybe Text
instanceId :: Maybe Text
$sel:instanceId:ElasticGpus' :: ElasticGpus -> Maybe Text
instanceId} -> Maybe Text
instanceId) (\s :: ElasticGpus
s@ElasticGpus' {} Maybe Text
a -> ElasticGpus
s {$sel:instanceId:ElasticGpus' :: Maybe Text
instanceId = Maybe Text
a} :: ElasticGpus)

-- | The tags assigned to the Elastic Graphics accelerator.
elasticGpus_tags :: Lens.Lens' ElasticGpus (Prelude.Maybe [Tag])
elasticGpus_tags :: Lens' ElasticGpus (Maybe [Tag])
elasticGpus_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ElasticGpus' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:ElasticGpus' :: ElasticGpus -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: ElasticGpus
s@ElasticGpus' {} Maybe [Tag]
a -> ElasticGpus
s {$sel:tags:ElasticGpus' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: ElasticGpus) 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 ElasticGpus where
  parseXML :: [Node] -> Either String ElasticGpus
parseXML [Node]
x =
    Maybe Text
-> Maybe ElasticGpuHealth
-> Maybe Text
-> Maybe ElasticGpuState
-> Maybe Text
-> Maybe Text
-> Maybe [Tag]
-> ElasticGpus
ElasticGpus'
      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
"elasticGpuHealth")
      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
"elasticGpuId")
      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
"elasticGpuState")
      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
"elasticGpuType")
      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
"instanceId")
      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 ElasticGpus where
  hashWithSalt :: Int -> ElasticGpus -> Int
hashWithSalt Int
_salt ElasticGpus' {Maybe [Tag]
Maybe Text
Maybe ElasticGpuState
Maybe ElasticGpuHealth
tags :: Maybe [Tag]
instanceId :: Maybe Text
elasticGpuType :: Maybe Text
elasticGpuState :: Maybe ElasticGpuState
elasticGpuId :: Maybe Text
elasticGpuHealth :: Maybe ElasticGpuHealth
availabilityZone :: Maybe Text
$sel:tags:ElasticGpus' :: ElasticGpus -> Maybe [Tag]
$sel:instanceId:ElasticGpus' :: ElasticGpus -> Maybe Text
$sel:elasticGpuType:ElasticGpus' :: ElasticGpus -> Maybe Text
$sel:elasticGpuState:ElasticGpus' :: ElasticGpus -> Maybe ElasticGpuState
$sel:elasticGpuId:ElasticGpus' :: ElasticGpus -> Maybe Text
$sel:elasticGpuHealth:ElasticGpus' :: ElasticGpus -> Maybe ElasticGpuHealth
$sel:availabilityZone:ElasticGpus' :: ElasticGpus -> 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 ElasticGpuHealth
elasticGpuHealth
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
elasticGpuId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ElasticGpuState
elasticGpuState
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
elasticGpuType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
instanceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags

instance Prelude.NFData ElasticGpus where
  rnf :: ElasticGpus -> ()
rnf ElasticGpus' {Maybe [Tag]
Maybe Text
Maybe ElasticGpuState
Maybe ElasticGpuHealth
tags :: Maybe [Tag]
instanceId :: Maybe Text
elasticGpuType :: Maybe Text
elasticGpuState :: Maybe ElasticGpuState
elasticGpuId :: Maybe Text
elasticGpuHealth :: Maybe ElasticGpuHealth
availabilityZone :: Maybe Text
$sel:tags:ElasticGpus' :: ElasticGpus -> Maybe [Tag]
$sel:instanceId:ElasticGpus' :: ElasticGpus -> Maybe Text
$sel:elasticGpuType:ElasticGpus' :: ElasticGpus -> Maybe Text
$sel:elasticGpuState:ElasticGpus' :: ElasticGpus -> Maybe ElasticGpuState
$sel:elasticGpuId:ElasticGpus' :: ElasticGpus -> Maybe Text
$sel:elasticGpuHealth:ElasticGpus' :: ElasticGpus -> Maybe ElasticGpuHealth
$sel:availabilityZone:ElasticGpus' :: ElasticGpus -> 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 ElasticGpuHealth
elasticGpuHealth
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
elasticGpuId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ElasticGpuState
elasticGpuState
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
elasticGpuType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
instanceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags