{-# 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.TransitGatewayRouteTable
-- 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.TransitGatewayRouteTable 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.TransitGatewayRouteTableState
import qualified Amazonka.Prelude as Prelude

-- | Describes a transit gateway route table.
--
-- /See:/ 'newTransitGatewayRouteTable' smart constructor.
data TransitGatewayRouteTable = TransitGatewayRouteTable'
  { -- | The creation time.
    TransitGatewayRouteTable -> Maybe ISO8601
creationTime :: Prelude.Maybe Data.ISO8601,
    -- | Indicates whether this is the default association route table for the
    -- transit gateway.
    TransitGatewayRouteTable -> Maybe Bool
defaultAssociationRouteTable :: Prelude.Maybe Prelude.Bool,
    -- | Indicates whether this is the default propagation route table for the
    -- transit gateway.
    TransitGatewayRouteTable -> Maybe Bool
defaultPropagationRouteTable :: Prelude.Maybe Prelude.Bool,
    -- | The state of the transit gateway route table.
    TransitGatewayRouteTable -> Maybe TransitGatewayRouteTableState
state :: Prelude.Maybe TransitGatewayRouteTableState,
    -- | Any tags assigned to the route table.
    TransitGatewayRouteTable -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The ID of the transit gateway.
    TransitGatewayRouteTable -> Maybe Text
transitGatewayId :: Prelude.Maybe Prelude.Text,
    -- | The ID of the transit gateway route table.
    TransitGatewayRouteTable -> Maybe Text
transitGatewayRouteTableId :: Prelude.Maybe Prelude.Text
  }
  deriving (TransitGatewayRouteTable -> TransitGatewayRouteTable -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TransitGatewayRouteTable -> TransitGatewayRouteTable -> Bool
$c/= :: TransitGatewayRouteTable -> TransitGatewayRouteTable -> Bool
== :: TransitGatewayRouteTable -> TransitGatewayRouteTable -> Bool
$c== :: TransitGatewayRouteTable -> TransitGatewayRouteTable -> Bool
Prelude.Eq, ReadPrec [TransitGatewayRouteTable]
ReadPrec TransitGatewayRouteTable
Int -> ReadS TransitGatewayRouteTable
ReadS [TransitGatewayRouteTable]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TransitGatewayRouteTable]
$creadListPrec :: ReadPrec [TransitGatewayRouteTable]
readPrec :: ReadPrec TransitGatewayRouteTable
$creadPrec :: ReadPrec TransitGatewayRouteTable
readList :: ReadS [TransitGatewayRouteTable]
$creadList :: ReadS [TransitGatewayRouteTable]
readsPrec :: Int -> ReadS TransitGatewayRouteTable
$creadsPrec :: Int -> ReadS TransitGatewayRouteTable
Prelude.Read, Int -> TransitGatewayRouteTable -> ShowS
[TransitGatewayRouteTable] -> ShowS
TransitGatewayRouteTable -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TransitGatewayRouteTable] -> ShowS
$cshowList :: [TransitGatewayRouteTable] -> ShowS
show :: TransitGatewayRouteTable -> String
$cshow :: TransitGatewayRouteTable -> String
showsPrec :: Int -> TransitGatewayRouteTable -> ShowS
$cshowsPrec :: Int -> TransitGatewayRouteTable -> ShowS
Prelude.Show, forall x.
Rep TransitGatewayRouteTable x -> TransitGatewayRouteTable
forall x.
TransitGatewayRouteTable -> Rep TransitGatewayRouteTable x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep TransitGatewayRouteTable x -> TransitGatewayRouteTable
$cfrom :: forall x.
TransitGatewayRouteTable -> Rep TransitGatewayRouteTable x
Prelude.Generic)

-- |
-- Create a value of 'TransitGatewayRouteTable' 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', 'transitGatewayRouteTable_creationTime' - The creation time.
--
-- 'defaultAssociationRouteTable', 'transitGatewayRouteTable_defaultAssociationRouteTable' - Indicates whether this is the default association route table for the
-- transit gateway.
--
-- 'defaultPropagationRouteTable', 'transitGatewayRouteTable_defaultPropagationRouteTable' - Indicates whether this is the default propagation route table for the
-- transit gateway.
--
-- 'state', 'transitGatewayRouteTable_state' - The state of the transit gateway route table.
--
-- 'tags', 'transitGatewayRouteTable_tags' - Any tags assigned to the route table.
--
-- 'transitGatewayId', 'transitGatewayRouteTable_transitGatewayId' - The ID of the transit gateway.
--
-- 'transitGatewayRouteTableId', 'transitGatewayRouteTable_transitGatewayRouteTableId' - The ID of the transit gateway route table.
newTransitGatewayRouteTable ::
  TransitGatewayRouteTable
newTransitGatewayRouteTable :: TransitGatewayRouteTable
newTransitGatewayRouteTable =
  TransitGatewayRouteTable'
    { $sel:creationTime:TransitGatewayRouteTable' :: Maybe ISO8601
creationTime =
        forall a. Maybe a
Prelude.Nothing,
      $sel:defaultAssociationRouteTable:TransitGatewayRouteTable' :: Maybe Bool
defaultAssociationRouteTable = forall a. Maybe a
Prelude.Nothing,
      $sel:defaultPropagationRouteTable:TransitGatewayRouteTable' :: Maybe Bool
defaultPropagationRouteTable = forall a. Maybe a
Prelude.Nothing,
      $sel:state:TransitGatewayRouteTable' :: Maybe TransitGatewayRouteTableState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:TransitGatewayRouteTable' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:transitGatewayId:TransitGatewayRouteTable' :: Maybe Text
transitGatewayId = forall a. Maybe a
Prelude.Nothing,
      $sel:transitGatewayRouteTableId:TransitGatewayRouteTable' :: Maybe Text
transitGatewayRouteTableId = forall a. Maybe a
Prelude.Nothing
    }

-- | The creation time.
transitGatewayRouteTable_creationTime :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe Prelude.UTCTime)
transitGatewayRouteTable_creationTime :: Lens' TransitGatewayRouteTable (Maybe UTCTime)
transitGatewayRouteTable_creationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRouteTable' {Maybe ISO8601
creationTime :: Maybe ISO8601
$sel:creationTime:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe ISO8601
creationTime} -> Maybe ISO8601
creationTime) (\s :: TransitGatewayRouteTable
s@TransitGatewayRouteTable' {} Maybe ISO8601
a -> TransitGatewayRouteTable
s {$sel:creationTime:TransitGatewayRouteTable' :: Maybe ISO8601
creationTime = Maybe ISO8601
a} :: TransitGatewayRouteTable) 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

-- | Indicates whether this is the default association route table for the
-- transit gateway.
transitGatewayRouteTable_defaultAssociationRouteTable :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe Prelude.Bool)
transitGatewayRouteTable_defaultAssociationRouteTable :: Lens' TransitGatewayRouteTable (Maybe Bool)
transitGatewayRouteTable_defaultAssociationRouteTable = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRouteTable' {Maybe Bool
defaultAssociationRouteTable :: Maybe Bool
$sel:defaultAssociationRouteTable:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Bool
defaultAssociationRouteTable} -> Maybe Bool
defaultAssociationRouteTable) (\s :: TransitGatewayRouteTable
s@TransitGatewayRouteTable' {} Maybe Bool
a -> TransitGatewayRouteTable
s {$sel:defaultAssociationRouteTable:TransitGatewayRouteTable' :: Maybe Bool
defaultAssociationRouteTable = Maybe Bool
a} :: TransitGatewayRouteTable)

-- | Indicates whether this is the default propagation route table for the
-- transit gateway.
transitGatewayRouteTable_defaultPropagationRouteTable :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe Prelude.Bool)
transitGatewayRouteTable_defaultPropagationRouteTable :: Lens' TransitGatewayRouteTable (Maybe Bool)
transitGatewayRouteTable_defaultPropagationRouteTable = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRouteTable' {Maybe Bool
defaultPropagationRouteTable :: Maybe Bool
$sel:defaultPropagationRouteTable:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Bool
defaultPropagationRouteTable} -> Maybe Bool
defaultPropagationRouteTable) (\s :: TransitGatewayRouteTable
s@TransitGatewayRouteTable' {} Maybe Bool
a -> TransitGatewayRouteTable
s {$sel:defaultPropagationRouteTable:TransitGatewayRouteTable' :: Maybe Bool
defaultPropagationRouteTable = Maybe Bool
a} :: TransitGatewayRouteTable)

-- | The state of the transit gateway route table.
transitGatewayRouteTable_state :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe TransitGatewayRouteTableState)
transitGatewayRouteTable_state :: Lens'
  TransitGatewayRouteTable (Maybe TransitGatewayRouteTableState)
transitGatewayRouteTable_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRouteTable' {Maybe TransitGatewayRouteTableState
state :: Maybe TransitGatewayRouteTableState
$sel:state:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe TransitGatewayRouteTableState
state} -> Maybe TransitGatewayRouteTableState
state) (\s :: TransitGatewayRouteTable
s@TransitGatewayRouteTable' {} Maybe TransitGatewayRouteTableState
a -> TransitGatewayRouteTable
s {$sel:state:TransitGatewayRouteTable' :: Maybe TransitGatewayRouteTableState
state = Maybe TransitGatewayRouteTableState
a} :: TransitGatewayRouteTable)

-- | Any tags assigned to the route table.
transitGatewayRouteTable_tags :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe [Tag])
transitGatewayRouteTable_tags :: Lens' TransitGatewayRouteTable (Maybe [Tag])
transitGatewayRouteTable_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRouteTable' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: TransitGatewayRouteTable
s@TransitGatewayRouteTable' {} Maybe [Tag]
a -> TransitGatewayRouteTable
s {$sel:tags:TransitGatewayRouteTable' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: TransitGatewayRouteTable) 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 transit gateway.
transitGatewayRouteTable_transitGatewayId :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe Prelude.Text)
transitGatewayRouteTable_transitGatewayId :: Lens' TransitGatewayRouteTable (Maybe Text)
transitGatewayRouteTable_transitGatewayId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRouteTable' {Maybe Text
transitGatewayId :: Maybe Text
$sel:transitGatewayId:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Text
transitGatewayId} -> Maybe Text
transitGatewayId) (\s :: TransitGatewayRouteTable
s@TransitGatewayRouteTable' {} Maybe Text
a -> TransitGatewayRouteTable
s {$sel:transitGatewayId:TransitGatewayRouteTable' :: Maybe Text
transitGatewayId = Maybe Text
a} :: TransitGatewayRouteTable)

-- | The ID of the transit gateway route table.
transitGatewayRouteTable_transitGatewayRouteTableId :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe Prelude.Text)
transitGatewayRouteTable_transitGatewayRouteTableId :: Lens' TransitGatewayRouteTable (Maybe Text)
transitGatewayRouteTable_transitGatewayRouteTableId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRouteTable' {Maybe Text
transitGatewayRouteTableId :: Maybe Text
$sel:transitGatewayRouteTableId:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Text
transitGatewayRouteTableId} -> Maybe Text
transitGatewayRouteTableId) (\s :: TransitGatewayRouteTable
s@TransitGatewayRouteTable' {} Maybe Text
a -> TransitGatewayRouteTable
s {$sel:transitGatewayRouteTableId:TransitGatewayRouteTable' :: Maybe Text
transitGatewayRouteTableId = Maybe Text
a} :: TransitGatewayRouteTable)

instance Data.FromXML TransitGatewayRouteTable where
  parseXML :: [Node] -> Either String TransitGatewayRouteTable
parseXML [Node]
x =
    Maybe ISO8601
-> Maybe Bool
-> Maybe Bool
-> Maybe TransitGatewayRouteTableState
-> Maybe [Tag]
-> Maybe Text
-> Maybe Text
-> TransitGatewayRouteTable
TransitGatewayRouteTable'
      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
"defaultAssociationRouteTable")
      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
"defaultPropagationRouteTable")
      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
"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
"transitGatewayRouteTableId")

instance Prelude.Hashable TransitGatewayRouteTable where
  hashWithSalt :: Int -> TransitGatewayRouteTable -> Int
hashWithSalt Int
_salt TransitGatewayRouteTable' {Maybe Bool
Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe TransitGatewayRouteTableState
transitGatewayRouteTableId :: Maybe Text
transitGatewayId :: Maybe Text
tags :: Maybe [Tag]
state :: Maybe TransitGatewayRouteTableState
defaultPropagationRouteTable :: Maybe Bool
defaultAssociationRouteTable :: Maybe Bool
creationTime :: Maybe ISO8601
$sel:transitGatewayRouteTableId:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Text
$sel:transitGatewayId:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Text
$sel:tags:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe [Tag]
$sel:state:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe TransitGatewayRouteTableState
$sel:defaultPropagationRouteTable:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Bool
$sel:defaultAssociationRouteTable:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Bool
$sel:creationTime:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> 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 Bool
defaultAssociationRouteTable
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
defaultPropagationRouteTable
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TransitGatewayRouteTableState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
transitGatewayId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
transitGatewayRouteTableId

instance Prelude.NFData TransitGatewayRouteTable where
  rnf :: TransitGatewayRouteTable -> ()
rnf TransitGatewayRouteTable' {Maybe Bool
Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe TransitGatewayRouteTableState
transitGatewayRouteTableId :: Maybe Text
transitGatewayId :: Maybe Text
tags :: Maybe [Tag]
state :: Maybe TransitGatewayRouteTableState
defaultPropagationRouteTable :: Maybe Bool
defaultAssociationRouteTable :: Maybe Bool
creationTime :: Maybe ISO8601
$sel:transitGatewayRouteTableId:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Text
$sel:transitGatewayId:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Text
$sel:tags:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe [Tag]
$sel:state:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe TransitGatewayRouteTableState
$sel:defaultPropagationRouteTable:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Bool
$sel:defaultAssociationRouteTable:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> Maybe Bool
$sel:creationTime:TransitGatewayRouteTable' :: TransitGatewayRouteTable -> 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 Bool
defaultAssociationRouteTable
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
defaultPropagationRouteTable
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TransitGatewayRouteTableState
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
transitGatewayId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
transitGatewayRouteTableId