{-# 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.TransitGatewayConnect
-- 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.TransitGatewayConnect 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.TransitGatewayAttachmentState
import Amazonka.EC2.Types.TransitGatewayConnectOptions
import qualified Amazonka.Prelude as Prelude

-- | Describes a transit gateway Connect attachment.
--
-- /See:/ 'newTransitGatewayConnect' smart constructor.
data TransitGatewayConnect = TransitGatewayConnect'
  { -- | The creation time.
    TransitGatewayConnect -> Maybe ISO8601
creationTime :: Prelude.Maybe Data.ISO8601,
    -- | The Connect attachment options.
    TransitGatewayConnect -> Maybe TransitGatewayConnectOptions
options :: Prelude.Maybe TransitGatewayConnectOptions,
    -- | The state of the attachment.
    TransitGatewayConnect -> Maybe TransitGatewayAttachmentState
state :: Prelude.Maybe TransitGatewayAttachmentState,
    -- | The tags for the attachment.
    TransitGatewayConnect -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The ID of the Connect attachment.
    TransitGatewayConnect -> Maybe Text
transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
    -- | The ID of the transit gateway.
    TransitGatewayConnect -> Maybe Text
transitGatewayId :: Prelude.Maybe Prelude.Text,
    -- | The ID of the attachment from which the Connect attachment was created.
    TransitGatewayConnect -> Maybe Text
transportTransitGatewayAttachmentId :: Prelude.Maybe Prelude.Text
  }
  deriving (TransitGatewayConnect -> TransitGatewayConnect -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TransitGatewayConnect -> TransitGatewayConnect -> Bool
$c/= :: TransitGatewayConnect -> TransitGatewayConnect -> Bool
== :: TransitGatewayConnect -> TransitGatewayConnect -> Bool
$c== :: TransitGatewayConnect -> TransitGatewayConnect -> Bool
Prelude.Eq, ReadPrec [TransitGatewayConnect]
ReadPrec TransitGatewayConnect
Int -> ReadS TransitGatewayConnect
ReadS [TransitGatewayConnect]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TransitGatewayConnect]
$creadListPrec :: ReadPrec [TransitGatewayConnect]
readPrec :: ReadPrec TransitGatewayConnect
$creadPrec :: ReadPrec TransitGatewayConnect
readList :: ReadS [TransitGatewayConnect]
$creadList :: ReadS [TransitGatewayConnect]
readsPrec :: Int -> ReadS TransitGatewayConnect
$creadsPrec :: Int -> ReadS TransitGatewayConnect
Prelude.Read, Int -> TransitGatewayConnect -> ShowS
[TransitGatewayConnect] -> ShowS
TransitGatewayConnect -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TransitGatewayConnect] -> ShowS
$cshowList :: [TransitGatewayConnect] -> ShowS
show :: TransitGatewayConnect -> String
$cshow :: TransitGatewayConnect -> String
showsPrec :: Int -> TransitGatewayConnect -> ShowS
$cshowsPrec :: Int -> TransitGatewayConnect -> ShowS
Prelude.Show, forall x. Rep TransitGatewayConnect x -> TransitGatewayConnect
forall x. TransitGatewayConnect -> Rep TransitGatewayConnect x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep TransitGatewayConnect x -> TransitGatewayConnect
$cfrom :: forall x. TransitGatewayConnect -> Rep TransitGatewayConnect x
Prelude.Generic)

-- |
-- Create a value of 'TransitGatewayConnect' 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', 'transitGatewayConnect_creationTime' - The creation time.
--
-- 'options', 'transitGatewayConnect_options' - The Connect attachment options.
--
-- 'state', 'transitGatewayConnect_state' - The state of the attachment.
--
-- 'tags', 'transitGatewayConnect_tags' - The tags for the attachment.
--
-- 'transitGatewayAttachmentId', 'transitGatewayConnect_transitGatewayAttachmentId' - The ID of the Connect attachment.
--
-- 'transitGatewayId', 'transitGatewayConnect_transitGatewayId' - The ID of the transit gateway.
--
-- 'transportTransitGatewayAttachmentId', 'transitGatewayConnect_transportTransitGatewayAttachmentId' - The ID of the attachment from which the Connect attachment was created.
newTransitGatewayConnect ::
  TransitGatewayConnect
newTransitGatewayConnect :: TransitGatewayConnect
newTransitGatewayConnect =
  TransitGatewayConnect'
    { $sel:creationTime:TransitGatewayConnect' :: Maybe ISO8601
creationTime =
        forall a. Maybe a
Prelude.Nothing,
      $sel:options:TransitGatewayConnect' :: Maybe TransitGatewayConnectOptions
options = forall a. Maybe a
Prelude.Nothing,
      $sel:state:TransitGatewayConnect' :: Maybe TransitGatewayAttachmentState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:TransitGatewayConnect' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:transitGatewayAttachmentId:TransitGatewayConnect' :: Maybe Text
transitGatewayAttachmentId = forall a. Maybe a
Prelude.Nothing,
      $sel:transitGatewayId:TransitGatewayConnect' :: Maybe Text
transitGatewayId = forall a. Maybe a
Prelude.Nothing,
      $sel:transportTransitGatewayAttachmentId:TransitGatewayConnect' :: Maybe Text
transportTransitGatewayAttachmentId =
        forall a. Maybe a
Prelude.Nothing
    }

-- | The creation time.
transitGatewayConnect_creationTime :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe Prelude.UTCTime)
transitGatewayConnect_creationTime :: Lens' TransitGatewayConnect (Maybe UTCTime)
transitGatewayConnect_creationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayConnect' {Maybe ISO8601
creationTime :: Maybe ISO8601
$sel:creationTime:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe ISO8601
creationTime} -> Maybe ISO8601
creationTime) (\s :: TransitGatewayConnect
s@TransitGatewayConnect' {} Maybe ISO8601
a -> TransitGatewayConnect
s {$sel:creationTime:TransitGatewayConnect' :: Maybe ISO8601
creationTime = Maybe ISO8601
a} :: TransitGatewayConnect) 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 Connect attachment options.
transitGatewayConnect_options :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe TransitGatewayConnectOptions)
transitGatewayConnect_options :: Lens' TransitGatewayConnect (Maybe TransitGatewayConnectOptions)
transitGatewayConnect_options = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayConnect' {Maybe TransitGatewayConnectOptions
options :: Maybe TransitGatewayConnectOptions
$sel:options:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe TransitGatewayConnectOptions
options} -> Maybe TransitGatewayConnectOptions
options) (\s :: TransitGatewayConnect
s@TransitGatewayConnect' {} Maybe TransitGatewayConnectOptions
a -> TransitGatewayConnect
s {$sel:options:TransitGatewayConnect' :: Maybe TransitGatewayConnectOptions
options = Maybe TransitGatewayConnectOptions
a} :: TransitGatewayConnect)

-- | The state of the attachment.
transitGatewayConnect_state :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe TransitGatewayAttachmentState)
transitGatewayConnect_state :: Lens' TransitGatewayConnect (Maybe TransitGatewayAttachmentState)
transitGatewayConnect_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayConnect' {Maybe TransitGatewayAttachmentState
state :: Maybe TransitGatewayAttachmentState
$sel:state:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe TransitGatewayAttachmentState
state} -> Maybe TransitGatewayAttachmentState
state) (\s :: TransitGatewayConnect
s@TransitGatewayConnect' {} Maybe TransitGatewayAttachmentState
a -> TransitGatewayConnect
s {$sel:state:TransitGatewayConnect' :: Maybe TransitGatewayAttachmentState
state = Maybe TransitGatewayAttachmentState
a} :: TransitGatewayConnect)

-- | The tags for the attachment.
transitGatewayConnect_tags :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe [Tag])
transitGatewayConnect_tags :: Lens' TransitGatewayConnect (Maybe [Tag])
transitGatewayConnect_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayConnect' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: TransitGatewayConnect
s@TransitGatewayConnect' {} Maybe [Tag]
a -> TransitGatewayConnect
s {$sel:tags:TransitGatewayConnect' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: TransitGatewayConnect) 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 Connect attachment.
transitGatewayConnect_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe Prelude.Text)
transitGatewayConnect_transitGatewayAttachmentId :: Lens' TransitGatewayConnect (Maybe Text)
transitGatewayConnect_transitGatewayAttachmentId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayConnect' {Maybe Text
transitGatewayAttachmentId :: Maybe Text
$sel:transitGatewayAttachmentId:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe Text
transitGatewayAttachmentId} -> Maybe Text
transitGatewayAttachmentId) (\s :: TransitGatewayConnect
s@TransitGatewayConnect' {} Maybe Text
a -> TransitGatewayConnect
s {$sel:transitGatewayAttachmentId:TransitGatewayConnect' :: Maybe Text
transitGatewayAttachmentId = Maybe Text
a} :: TransitGatewayConnect)

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

-- | The ID of the attachment from which the Connect attachment was created.
transitGatewayConnect_transportTransitGatewayAttachmentId :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe Prelude.Text)
transitGatewayConnect_transportTransitGatewayAttachmentId :: Lens' TransitGatewayConnect (Maybe Text)
transitGatewayConnect_transportTransitGatewayAttachmentId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayConnect' {Maybe Text
transportTransitGatewayAttachmentId :: Maybe Text
$sel:transportTransitGatewayAttachmentId:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe Text
transportTransitGatewayAttachmentId} -> Maybe Text
transportTransitGatewayAttachmentId) (\s :: TransitGatewayConnect
s@TransitGatewayConnect' {} Maybe Text
a -> TransitGatewayConnect
s {$sel:transportTransitGatewayAttachmentId:TransitGatewayConnect' :: Maybe Text
transportTransitGatewayAttachmentId = Maybe Text
a} :: TransitGatewayConnect)

instance Data.FromXML TransitGatewayConnect where
  parseXML :: [Node] -> Either String TransitGatewayConnect
parseXML [Node]
x =
    Maybe ISO8601
-> Maybe TransitGatewayConnectOptions
-> Maybe TransitGatewayAttachmentState
-> Maybe [Tag]
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> TransitGatewayConnect
TransitGatewayConnect'
      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
"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
"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
"transitGatewayAttachmentId")
      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")
      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
"transportTransitGatewayAttachmentId")

instance Prelude.Hashable TransitGatewayConnect where
  hashWithSalt :: Int -> TransitGatewayConnect -> Int
hashWithSalt Int
_salt TransitGatewayConnect' {Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe TransitGatewayAttachmentState
Maybe TransitGatewayConnectOptions
transportTransitGatewayAttachmentId :: Maybe Text
transitGatewayId :: Maybe Text
transitGatewayAttachmentId :: Maybe Text
tags :: Maybe [Tag]
state :: Maybe TransitGatewayAttachmentState
options :: Maybe TransitGatewayConnectOptions
creationTime :: Maybe ISO8601
$sel:transportTransitGatewayAttachmentId:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe Text
$sel:transitGatewayId:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe Text
$sel:transitGatewayAttachmentId:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe Text
$sel:tags:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe [Tag]
$sel:state:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe TransitGatewayAttachmentState
$sel:options:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe TransitGatewayConnectOptions
$sel:creationTime:TransitGatewayConnect' :: TransitGatewayConnect -> 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 TransitGatewayConnectOptions
options
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TransitGatewayAttachmentState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
transitGatewayAttachmentId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
transitGatewayId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
transportTransitGatewayAttachmentId

instance Prelude.NFData TransitGatewayConnect where
  rnf :: TransitGatewayConnect -> ()
rnf TransitGatewayConnect' {Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe TransitGatewayAttachmentState
Maybe TransitGatewayConnectOptions
transportTransitGatewayAttachmentId :: Maybe Text
transitGatewayId :: Maybe Text
transitGatewayAttachmentId :: Maybe Text
tags :: Maybe [Tag]
state :: Maybe TransitGatewayAttachmentState
options :: Maybe TransitGatewayConnectOptions
creationTime :: Maybe ISO8601
$sel:transportTransitGatewayAttachmentId:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe Text
$sel:transitGatewayId:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe Text
$sel:transitGatewayAttachmentId:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe Text
$sel:tags:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe [Tag]
$sel:state:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe TransitGatewayAttachmentState
$sel:options:TransitGatewayConnect' :: TransitGatewayConnect -> Maybe TransitGatewayConnectOptions
$sel:creationTime:TransitGatewayConnect' :: TransitGatewayConnect -> 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 TransitGatewayConnectOptions
options
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TransitGatewayAttachmentState
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
transitGatewayAttachmentId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
transitGatewayId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
transportTransitGatewayAttachmentId