{-# 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.TransitGatewayRoute
-- 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.TransitGatewayRoute 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.TransitGatewayRouteAttachment
import Amazonka.EC2.Types.TransitGatewayRouteState
import Amazonka.EC2.Types.TransitGatewayRouteType
import qualified Amazonka.Prelude as Prelude

-- | Describes a route for a transit gateway route table.
--
-- /See:/ 'newTransitGatewayRoute' smart constructor.
data TransitGatewayRoute = TransitGatewayRoute'
  { -- | The CIDR block used for destination matches.
    TransitGatewayRoute -> Maybe Text
destinationCidrBlock :: Prelude.Maybe Prelude.Text,
    -- | The ID of the prefix list used for destination matches.
    TransitGatewayRoute -> Maybe Text
prefixListId :: Prelude.Maybe Prelude.Text,
    -- | The state of the route.
    TransitGatewayRoute -> Maybe TransitGatewayRouteState
state :: Prelude.Maybe TransitGatewayRouteState,
    -- | The attachments.
    TransitGatewayRoute -> Maybe [TransitGatewayRouteAttachment]
transitGatewayAttachments :: Prelude.Maybe [TransitGatewayRouteAttachment],
    -- | The ID of the transit gateway route table announcement.
    TransitGatewayRoute -> Maybe Text
transitGatewayRouteTableAnnouncementId :: Prelude.Maybe Prelude.Text,
    -- | The route type.
    TransitGatewayRoute -> Maybe TransitGatewayRouteType
type' :: Prelude.Maybe TransitGatewayRouteType
  }
  deriving (TransitGatewayRoute -> TransitGatewayRoute -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TransitGatewayRoute -> TransitGatewayRoute -> Bool
$c/= :: TransitGatewayRoute -> TransitGatewayRoute -> Bool
== :: TransitGatewayRoute -> TransitGatewayRoute -> Bool
$c== :: TransitGatewayRoute -> TransitGatewayRoute -> Bool
Prelude.Eq, ReadPrec [TransitGatewayRoute]
ReadPrec TransitGatewayRoute
Int -> ReadS TransitGatewayRoute
ReadS [TransitGatewayRoute]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TransitGatewayRoute]
$creadListPrec :: ReadPrec [TransitGatewayRoute]
readPrec :: ReadPrec TransitGatewayRoute
$creadPrec :: ReadPrec TransitGatewayRoute
readList :: ReadS [TransitGatewayRoute]
$creadList :: ReadS [TransitGatewayRoute]
readsPrec :: Int -> ReadS TransitGatewayRoute
$creadsPrec :: Int -> ReadS TransitGatewayRoute
Prelude.Read, Int -> TransitGatewayRoute -> ShowS
[TransitGatewayRoute] -> ShowS
TransitGatewayRoute -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TransitGatewayRoute] -> ShowS
$cshowList :: [TransitGatewayRoute] -> ShowS
show :: TransitGatewayRoute -> String
$cshow :: TransitGatewayRoute -> String
showsPrec :: Int -> TransitGatewayRoute -> ShowS
$cshowsPrec :: Int -> TransitGatewayRoute -> ShowS
Prelude.Show, forall x. Rep TransitGatewayRoute x -> TransitGatewayRoute
forall x. TransitGatewayRoute -> Rep TransitGatewayRoute x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep TransitGatewayRoute x -> TransitGatewayRoute
$cfrom :: forall x. TransitGatewayRoute -> Rep TransitGatewayRoute x
Prelude.Generic)

-- |
-- Create a value of 'TransitGatewayRoute' 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:
--
-- 'destinationCidrBlock', 'transitGatewayRoute_destinationCidrBlock' - The CIDR block used for destination matches.
--
-- 'prefixListId', 'transitGatewayRoute_prefixListId' - The ID of the prefix list used for destination matches.
--
-- 'state', 'transitGatewayRoute_state' - The state of the route.
--
-- 'transitGatewayAttachments', 'transitGatewayRoute_transitGatewayAttachments' - The attachments.
--
-- 'transitGatewayRouteTableAnnouncementId', 'transitGatewayRoute_transitGatewayRouteTableAnnouncementId' - The ID of the transit gateway route table announcement.
--
-- 'type'', 'transitGatewayRoute_type' - The route type.
newTransitGatewayRoute ::
  TransitGatewayRoute
newTransitGatewayRoute :: TransitGatewayRoute
newTransitGatewayRoute =
  TransitGatewayRoute'
    { $sel:destinationCidrBlock:TransitGatewayRoute' :: Maybe Text
destinationCidrBlock =
        forall a. Maybe a
Prelude.Nothing,
      $sel:prefixListId:TransitGatewayRoute' :: Maybe Text
prefixListId = forall a. Maybe a
Prelude.Nothing,
      $sel:state:TransitGatewayRoute' :: Maybe TransitGatewayRouteState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:transitGatewayAttachments:TransitGatewayRoute' :: Maybe [TransitGatewayRouteAttachment]
transitGatewayAttachments = forall a. Maybe a
Prelude.Nothing,
      $sel:transitGatewayRouteTableAnnouncementId:TransitGatewayRoute' :: Maybe Text
transitGatewayRouteTableAnnouncementId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:type':TransitGatewayRoute' :: Maybe TransitGatewayRouteType
type' = forall a. Maybe a
Prelude.Nothing
    }

-- | The CIDR block used for destination matches.
transitGatewayRoute_destinationCidrBlock :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe Prelude.Text)
transitGatewayRoute_destinationCidrBlock :: Lens' TransitGatewayRoute (Maybe Text)
transitGatewayRoute_destinationCidrBlock = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRoute' {Maybe Text
destinationCidrBlock :: Maybe Text
$sel:destinationCidrBlock:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe Text
destinationCidrBlock} -> Maybe Text
destinationCidrBlock) (\s :: TransitGatewayRoute
s@TransitGatewayRoute' {} Maybe Text
a -> TransitGatewayRoute
s {$sel:destinationCidrBlock:TransitGatewayRoute' :: Maybe Text
destinationCidrBlock = Maybe Text
a} :: TransitGatewayRoute)

-- | The ID of the prefix list used for destination matches.
transitGatewayRoute_prefixListId :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe Prelude.Text)
transitGatewayRoute_prefixListId :: Lens' TransitGatewayRoute (Maybe Text)
transitGatewayRoute_prefixListId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRoute' {Maybe Text
prefixListId :: Maybe Text
$sel:prefixListId:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe Text
prefixListId} -> Maybe Text
prefixListId) (\s :: TransitGatewayRoute
s@TransitGatewayRoute' {} Maybe Text
a -> TransitGatewayRoute
s {$sel:prefixListId:TransitGatewayRoute' :: Maybe Text
prefixListId = Maybe Text
a} :: TransitGatewayRoute)

-- | The state of the route.
transitGatewayRoute_state :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe TransitGatewayRouteState)
transitGatewayRoute_state :: Lens' TransitGatewayRoute (Maybe TransitGatewayRouteState)
transitGatewayRoute_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRoute' {Maybe TransitGatewayRouteState
state :: Maybe TransitGatewayRouteState
$sel:state:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe TransitGatewayRouteState
state} -> Maybe TransitGatewayRouteState
state) (\s :: TransitGatewayRoute
s@TransitGatewayRoute' {} Maybe TransitGatewayRouteState
a -> TransitGatewayRoute
s {$sel:state:TransitGatewayRoute' :: Maybe TransitGatewayRouteState
state = Maybe TransitGatewayRouteState
a} :: TransitGatewayRoute)

-- | The attachments.
transitGatewayRoute_transitGatewayAttachments :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe [TransitGatewayRouteAttachment])
transitGatewayRoute_transitGatewayAttachments :: Lens' TransitGatewayRoute (Maybe [TransitGatewayRouteAttachment])
transitGatewayRoute_transitGatewayAttachments = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRoute' {Maybe [TransitGatewayRouteAttachment]
transitGatewayAttachments :: Maybe [TransitGatewayRouteAttachment]
$sel:transitGatewayAttachments:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe [TransitGatewayRouteAttachment]
transitGatewayAttachments} -> Maybe [TransitGatewayRouteAttachment]
transitGatewayAttachments) (\s :: TransitGatewayRoute
s@TransitGatewayRoute' {} Maybe [TransitGatewayRouteAttachment]
a -> TransitGatewayRoute
s {$sel:transitGatewayAttachments:TransitGatewayRoute' :: Maybe [TransitGatewayRouteAttachment]
transitGatewayAttachments = Maybe [TransitGatewayRouteAttachment]
a} :: TransitGatewayRoute) 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 route table announcement.
transitGatewayRoute_transitGatewayRouteTableAnnouncementId :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe Prelude.Text)
transitGatewayRoute_transitGatewayRouteTableAnnouncementId :: Lens' TransitGatewayRoute (Maybe Text)
transitGatewayRoute_transitGatewayRouteTableAnnouncementId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRoute' {Maybe Text
transitGatewayRouteTableAnnouncementId :: Maybe Text
$sel:transitGatewayRouteTableAnnouncementId:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe Text
transitGatewayRouteTableAnnouncementId} -> Maybe Text
transitGatewayRouteTableAnnouncementId) (\s :: TransitGatewayRoute
s@TransitGatewayRoute' {} Maybe Text
a -> TransitGatewayRoute
s {$sel:transitGatewayRouteTableAnnouncementId:TransitGatewayRoute' :: Maybe Text
transitGatewayRouteTableAnnouncementId = Maybe Text
a} :: TransitGatewayRoute)

-- | The route type.
transitGatewayRoute_type :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe TransitGatewayRouteType)
transitGatewayRoute_type :: Lens' TransitGatewayRoute (Maybe TransitGatewayRouteType)
transitGatewayRoute_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TransitGatewayRoute' {Maybe TransitGatewayRouteType
type' :: Maybe TransitGatewayRouteType
$sel:type':TransitGatewayRoute' :: TransitGatewayRoute -> Maybe TransitGatewayRouteType
type'} -> Maybe TransitGatewayRouteType
type') (\s :: TransitGatewayRoute
s@TransitGatewayRoute' {} Maybe TransitGatewayRouteType
a -> TransitGatewayRoute
s {$sel:type':TransitGatewayRoute' :: Maybe TransitGatewayRouteType
type' = Maybe TransitGatewayRouteType
a} :: TransitGatewayRoute)

instance Data.FromXML TransitGatewayRoute where
  parseXML :: [Node] -> Either String TransitGatewayRoute
parseXML [Node]
x =
    Maybe Text
-> Maybe Text
-> Maybe TransitGatewayRouteState
-> Maybe [TransitGatewayRouteAttachment]
-> Maybe Text
-> Maybe TransitGatewayRouteType
-> TransitGatewayRoute
TransitGatewayRoute'
      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
"destinationCidrBlock")
      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
"prefixListId")
      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
"transitGatewayAttachments"
                      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
"transitGatewayRouteTableAnnouncementId")
      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
"type")

instance Prelude.Hashable TransitGatewayRoute where
  hashWithSalt :: Int -> TransitGatewayRoute -> Int
hashWithSalt Int
_salt TransitGatewayRoute' {Maybe [TransitGatewayRouteAttachment]
Maybe Text
Maybe TransitGatewayRouteState
Maybe TransitGatewayRouteType
type' :: Maybe TransitGatewayRouteType
transitGatewayRouteTableAnnouncementId :: Maybe Text
transitGatewayAttachments :: Maybe [TransitGatewayRouteAttachment]
state :: Maybe TransitGatewayRouteState
prefixListId :: Maybe Text
destinationCidrBlock :: Maybe Text
$sel:type':TransitGatewayRoute' :: TransitGatewayRoute -> Maybe TransitGatewayRouteType
$sel:transitGatewayRouteTableAnnouncementId:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe Text
$sel:transitGatewayAttachments:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe [TransitGatewayRouteAttachment]
$sel:state:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe TransitGatewayRouteState
$sel:prefixListId:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe Text
$sel:destinationCidrBlock:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
destinationCidrBlock
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
prefixListId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TransitGatewayRouteState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [TransitGatewayRouteAttachment]
transitGatewayAttachments
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
transitGatewayRouteTableAnnouncementId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TransitGatewayRouteType
type'

instance Prelude.NFData TransitGatewayRoute where
  rnf :: TransitGatewayRoute -> ()
rnf TransitGatewayRoute' {Maybe [TransitGatewayRouteAttachment]
Maybe Text
Maybe TransitGatewayRouteState
Maybe TransitGatewayRouteType
type' :: Maybe TransitGatewayRouteType
transitGatewayRouteTableAnnouncementId :: Maybe Text
transitGatewayAttachments :: Maybe [TransitGatewayRouteAttachment]
state :: Maybe TransitGatewayRouteState
prefixListId :: Maybe Text
destinationCidrBlock :: Maybe Text
$sel:type':TransitGatewayRoute' :: TransitGatewayRoute -> Maybe TransitGatewayRouteType
$sel:transitGatewayRouteTableAnnouncementId:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe Text
$sel:transitGatewayAttachments:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe [TransitGatewayRouteAttachment]
$sel:state:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe TransitGatewayRouteState
$sel:prefixListId:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe Text
$sel:destinationCidrBlock:TransitGatewayRoute' :: TransitGatewayRoute -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
destinationCidrBlock
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
prefixListId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TransitGatewayRouteState
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [TransitGatewayRouteAttachment]
transitGatewayAttachments
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
transitGatewayRouteTableAnnouncementId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TransitGatewayRouteType
type'