{-# 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.TransitGateway
-- 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.TransitGateway 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.Tag
import Amazonka.EC2.Types.TransitGatewayOptions
import Amazonka.EC2.Types.TransitGatewayState
import qualified Amazonka.Prelude as Prelude

-- | Describes a transit gateway.
--
-- /See:/ 'newTransitGateway' smart constructor.
data TransitGateway = TransitGateway'
  { -- | The creation time.
    TransitGateway -> Maybe ISO8601
creationTime :: Prelude.Maybe Data.ISO8601,
    -- | The description of the transit gateway.
    TransitGateway -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The transit gateway options.
    TransitGateway -> Maybe TransitGatewayOptions
options :: Prelude.Maybe TransitGatewayOptions,
    -- | The ID of the Amazon Web Services account that owns the transit gateway.
    TransitGateway -> Maybe Text
ownerId :: Prelude.Maybe Prelude.Text,
    -- | The state of the transit gateway.
    TransitGateway -> Maybe TransitGatewayState
state :: Prelude.Maybe TransitGatewayState,
    -- | The tags for the transit gateway.
    TransitGateway -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The Amazon Resource Name (ARN) of the transit gateway.
    TransitGateway -> Maybe Text
transitGatewayArn :: Prelude.Maybe Prelude.Text,
    -- | The ID of the transit gateway.
    TransitGateway -> Maybe Text
transitGatewayId :: Prelude.Maybe Prelude.Text
  }
  deriving (TransitGateway -> TransitGateway -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TransitGateway -> TransitGateway -> Bool
$c/= :: TransitGateway -> TransitGateway -> Bool
== :: TransitGateway -> TransitGateway -> Bool
$c== :: TransitGateway -> TransitGateway -> Bool
Prelude.Eq, ReadPrec [TransitGateway]
ReadPrec TransitGateway
Int -> ReadS TransitGateway
ReadS [TransitGateway]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TransitGateway]
$creadListPrec :: ReadPrec [TransitGateway]
readPrec :: ReadPrec TransitGateway
$creadPrec :: ReadPrec TransitGateway
readList :: ReadS [TransitGateway]
$creadList :: ReadS [TransitGateway]
readsPrec :: Int -> ReadS TransitGateway
$creadsPrec :: Int -> ReadS TransitGateway
Prelude.Read, Int -> TransitGateway -> ShowS
[TransitGateway] -> ShowS
TransitGateway -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TransitGateway] -> ShowS
$cshowList :: [TransitGateway] -> ShowS
show :: TransitGateway -> String
$cshow :: TransitGateway -> String
showsPrec :: Int -> TransitGateway -> ShowS
$cshowsPrec :: Int -> TransitGateway -> ShowS
Prelude.Show, forall x. Rep TransitGateway x -> TransitGateway
forall x. TransitGateway -> Rep TransitGateway x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep TransitGateway x -> TransitGateway
$cfrom :: forall x. TransitGateway -> Rep TransitGateway x
Prelude.Generic)

-- |
-- Create a value of 'TransitGateway' 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:
--
-- 'creationTime', 'transitGateway_creationTime' - The creation time.
--
-- 'description', 'transitGateway_description' - The description of the transit gateway.
--
-- 'options', 'transitGateway_options' - The transit gateway options.
--
-- 'ownerId', 'transitGateway_ownerId' - The ID of the Amazon Web Services account that owns the transit gateway.
--
-- 'state', 'transitGateway_state' - The state of the transit gateway.
--
-- 'tags', 'transitGateway_tags' - The tags for the transit gateway.
--
-- 'transitGatewayArn', 'transitGateway_transitGatewayArn' - The Amazon Resource Name (ARN) of the transit gateway.
--
-- 'transitGatewayId', 'transitGateway_transitGatewayId' - The ID of the transit gateway.
newTransitGateway ::
  TransitGateway
newTransitGateway :: TransitGateway
newTransitGateway =
  TransitGateway'
    { $sel:creationTime:TransitGateway' :: Maybe ISO8601
creationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:description:TransitGateway' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:options:TransitGateway' :: Maybe TransitGatewayOptions
options = forall a. Maybe a
Prelude.Nothing,
      $sel:ownerId:TransitGateway' :: Maybe Text
ownerId = forall a. Maybe a
Prelude.Nothing,
      $sel:state:TransitGateway' :: Maybe TransitGatewayState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:TransitGateway' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:transitGatewayArn:TransitGateway' :: Maybe Text
transitGatewayArn = forall a. Maybe a
Prelude.Nothing,
      $sel:transitGatewayId:TransitGateway' :: Maybe Text
transitGatewayId = forall a. Maybe a
Prelude.Nothing
    }

-- | The creation time.
transitGateway_creationTime :: Lens.Lens' TransitGateway (Prelude.Maybe Prelude.UTCTime)
transitGateway_creationTime :: Lens' TransitGateway (Maybe UTCTime)
transitGateway_creationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGateway' {Maybe ISO8601
creationTime :: Maybe ISO8601
$sel:creationTime:TransitGateway' :: TransitGateway -> Maybe ISO8601
creationTime} -> Maybe ISO8601
creationTime) (\s :: TransitGateway
s@TransitGateway' {} Maybe ISO8601
a -> TransitGateway
s {$sel:creationTime:TransitGateway' :: Maybe ISO8601
creationTime = Maybe ISO8601
a} :: TransitGateway) 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 description of the transit gateway.
transitGateway_description :: Lens.Lens' TransitGateway (Prelude.Maybe Prelude.Text)
transitGateway_description :: Lens' TransitGateway (Maybe Text)
transitGateway_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGateway' {Maybe Text
description :: Maybe Text
$sel:description:TransitGateway' :: TransitGateway -> Maybe Text
description} -> Maybe Text
description) (\s :: TransitGateway
s@TransitGateway' {} Maybe Text
a -> TransitGateway
s {$sel:description:TransitGateway' :: Maybe Text
description = Maybe Text
a} :: TransitGateway)

-- | The transit gateway options.
transitGateway_options :: Lens.Lens' TransitGateway (Prelude.Maybe TransitGatewayOptions)
transitGateway_options :: Lens' TransitGateway (Maybe TransitGatewayOptions)
transitGateway_options = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGateway' {Maybe TransitGatewayOptions
options :: Maybe TransitGatewayOptions
$sel:options:TransitGateway' :: TransitGateway -> Maybe TransitGatewayOptions
options} -> Maybe TransitGatewayOptions
options) (\s :: TransitGateway
s@TransitGateway' {} Maybe TransitGatewayOptions
a -> TransitGateway
s {$sel:options:TransitGateway' :: Maybe TransitGatewayOptions
options = Maybe TransitGatewayOptions
a} :: TransitGateway)

-- | The ID of the Amazon Web Services account that owns the transit gateway.
transitGateway_ownerId :: Lens.Lens' TransitGateway (Prelude.Maybe Prelude.Text)
transitGateway_ownerId :: Lens' TransitGateway (Maybe Text)
transitGateway_ownerId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGateway' {Maybe Text
ownerId :: Maybe Text
$sel:ownerId:TransitGateway' :: TransitGateway -> Maybe Text
ownerId} -> Maybe Text
ownerId) (\s :: TransitGateway
s@TransitGateway' {} Maybe Text
a -> TransitGateway
s {$sel:ownerId:TransitGateway' :: Maybe Text
ownerId = Maybe Text
a} :: TransitGateway)

-- | The state of the transit gateway.
transitGateway_state :: Lens.Lens' TransitGateway (Prelude.Maybe TransitGatewayState)
transitGateway_state :: Lens' TransitGateway (Maybe TransitGatewayState)
transitGateway_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGateway' {Maybe TransitGatewayState
state :: Maybe TransitGatewayState
$sel:state:TransitGateway' :: TransitGateway -> Maybe TransitGatewayState
state} -> Maybe TransitGatewayState
state) (\s :: TransitGateway
s@TransitGateway' {} Maybe TransitGatewayState
a -> TransitGateway
s {$sel:state:TransitGateway' :: Maybe TransitGatewayState
state = Maybe TransitGatewayState
a} :: TransitGateway)

-- | The tags for the transit gateway.
transitGateway_tags :: Lens.Lens' TransitGateway (Prelude.Maybe [Tag])
transitGateway_tags :: Lens' TransitGateway (Maybe [Tag])
transitGateway_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGateway' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:TransitGateway' :: TransitGateway -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: TransitGateway
s@TransitGateway' {} Maybe [Tag]
a -> TransitGateway
s {$sel:tags:TransitGateway' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: TransitGateway) 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 Amazon Resource Name (ARN) of the transit gateway.
transitGateway_transitGatewayArn :: Lens.Lens' TransitGateway (Prelude.Maybe Prelude.Text)
transitGateway_transitGatewayArn :: Lens' TransitGateway (Maybe Text)
transitGateway_transitGatewayArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGateway' {Maybe Text
transitGatewayArn :: Maybe Text
$sel:transitGatewayArn:TransitGateway' :: TransitGateway -> Maybe Text
transitGatewayArn} -> Maybe Text
transitGatewayArn) (\s :: TransitGateway
s@TransitGateway' {} Maybe Text
a -> TransitGateway
s {$sel:transitGatewayArn:TransitGateway' :: Maybe Text
transitGatewayArn = Maybe Text
a} :: TransitGateway)

-- | The ID of the transit gateway.
transitGateway_transitGatewayId :: Lens.Lens' TransitGateway (Prelude.Maybe Prelude.Text)
transitGateway_transitGatewayId :: Lens' TransitGateway (Maybe Text)
transitGateway_transitGatewayId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGateway' {Maybe Text
transitGatewayId :: Maybe Text
$sel:transitGatewayId:TransitGateway' :: TransitGateway -> Maybe Text
transitGatewayId} -> Maybe Text
transitGatewayId) (\s :: TransitGateway
s@TransitGateway' {} Maybe Text
a -> TransitGateway
s {$sel:transitGatewayId:TransitGateway' :: Maybe Text
transitGatewayId = Maybe Text
a} :: TransitGateway)

instance Data.FromXML TransitGateway where
  parseXML :: [Node] -> Either String TransitGateway
parseXML [Node]
x =
    Maybe ISO8601
-> Maybe Text
-> Maybe TransitGatewayOptions
-> Maybe Text
-> Maybe TransitGatewayState
-> Maybe [Tag]
-> Maybe Text
-> Maybe Text
-> TransitGateway
TransitGateway'
      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
"creationTime")
      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
"description")
      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
"options")
      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
"ownerId")
      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
"state")
      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")
                  )
      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
"transitGatewayArn")
      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
"transitGatewayId")

instance Prelude.Hashable TransitGateway where
  hashWithSalt :: Int -> TransitGateway -> Int
hashWithSalt Int
_salt TransitGateway' {Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe TransitGatewayState
Maybe TransitGatewayOptions
transitGatewayId :: Maybe Text
transitGatewayArn :: Maybe Text
tags :: Maybe [Tag]
state :: Maybe TransitGatewayState
ownerId :: Maybe Text
options :: Maybe TransitGatewayOptions
description :: Maybe Text
creationTime :: Maybe ISO8601
$sel:transitGatewayId:TransitGateway' :: TransitGateway -> Maybe Text
$sel:transitGatewayArn:TransitGateway' :: TransitGateway -> Maybe Text
$sel:tags:TransitGateway' :: TransitGateway -> Maybe [Tag]
$sel:state:TransitGateway' :: TransitGateway -> Maybe TransitGatewayState
$sel:ownerId:TransitGateway' :: TransitGateway -> Maybe Text
$sel:options:TransitGateway' :: TransitGateway -> Maybe TransitGatewayOptions
$sel:description:TransitGateway' :: TransitGateway -> Maybe Text
$sel:creationTime:TransitGateway' :: TransitGateway -> Maybe ISO8601
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ISO8601
creationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TransitGatewayOptions
options
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
ownerId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TransitGatewayState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
transitGatewayArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
transitGatewayId

instance Prelude.NFData TransitGateway where
  rnf :: TransitGateway -> ()
rnf TransitGateway' {Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe TransitGatewayState
Maybe TransitGatewayOptions
transitGatewayId :: Maybe Text
transitGatewayArn :: Maybe Text
tags :: Maybe [Tag]
state :: Maybe TransitGatewayState
ownerId :: Maybe Text
options :: Maybe TransitGatewayOptions
description :: Maybe Text
creationTime :: Maybe ISO8601
$sel:transitGatewayId:TransitGateway' :: TransitGateway -> Maybe Text
$sel:transitGatewayArn:TransitGateway' :: TransitGateway -> Maybe Text
$sel:tags:TransitGateway' :: TransitGateway -> Maybe [Tag]
$sel:state:TransitGateway' :: TransitGateway -> Maybe TransitGatewayState
$sel:ownerId:TransitGateway' :: TransitGateway -> Maybe Text
$sel:options:TransitGateway' :: TransitGateway -> Maybe TransitGatewayOptions
$sel:description:TransitGateway' :: TransitGateway -> Maybe Text
$sel:creationTime:TransitGateway' :: TransitGateway -> Maybe ISO8601
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ISO8601
creationTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TransitGatewayOptions
options
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
ownerId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TransitGatewayState
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
transitGatewayArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
transitGatewayId