{-# 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.PathComponent
-- 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.PathComponent 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.AdditionalDetail
import Amazonka.EC2.Types.AnalysisAclRule
import Amazonka.EC2.Types.AnalysisComponent
import Amazonka.EC2.Types.AnalysisPacketHeader
import Amazonka.EC2.Types.AnalysisRouteTableRoute
import Amazonka.EC2.Types.AnalysisSecurityGroupRule
import Amazonka.EC2.Types.Explanation
import Amazonka.EC2.Types.TransitGatewayRouteTableRoute
import qualified Amazonka.Prelude as Prelude

-- | Describes a path component.
--
-- /See:/ 'newPathComponent' smart constructor.
data PathComponent = PathComponent'
  { -- | The network ACL rule.
    PathComponent -> Maybe AnalysisAclRule
aclRule :: Prelude.Maybe AnalysisAclRule,
    -- | The additional details.
    PathComponent -> Maybe [AdditionalDetail]
additionalDetails :: Prelude.Maybe [AdditionalDetail],
    -- | The resource to which the path component is attached.
    PathComponent -> Maybe AnalysisComponent
attachedTo :: Prelude.Maybe AnalysisComponent,
    -- | The component.
    PathComponent -> Maybe AnalysisComponent
component :: Prelude.Maybe AnalysisComponent,
    -- | The destination VPC.
    PathComponent -> Maybe AnalysisComponent
destinationVpc :: Prelude.Maybe AnalysisComponent,
    -- | The load balancer listener.
    PathComponent -> Maybe AnalysisComponent
elasticLoadBalancerListener :: Prelude.Maybe AnalysisComponent,
    -- | The explanation codes.
    PathComponent -> Maybe [Explanation]
explanations :: Prelude.Maybe [Explanation],
    -- | The inbound header.
    PathComponent -> Maybe AnalysisPacketHeader
inboundHeader :: Prelude.Maybe AnalysisPacketHeader,
    -- | The outbound header.
    PathComponent -> Maybe AnalysisPacketHeader
outboundHeader :: Prelude.Maybe AnalysisPacketHeader,
    -- | The route table route.
    PathComponent -> Maybe AnalysisRouteTableRoute
routeTableRoute :: Prelude.Maybe AnalysisRouteTableRoute,
    -- | The security group rule.
    PathComponent -> Maybe AnalysisSecurityGroupRule
securityGroupRule :: Prelude.Maybe AnalysisSecurityGroupRule,
    -- | The sequence number.
    PathComponent -> Maybe Int
sequenceNumber :: Prelude.Maybe Prelude.Int,
    -- | The source VPC.
    PathComponent -> Maybe AnalysisComponent
sourceVpc :: Prelude.Maybe AnalysisComponent,
    -- | The subnet.
    PathComponent -> Maybe AnalysisComponent
subnet :: Prelude.Maybe AnalysisComponent,
    -- | The transit gateway.
    PathComponent -> Maybe AnalysisComponent
transitGateway :: Prelude.Maybe AnalysisComponent,
    -- | The route in a transit gateway route table.
    PathComponent -> Maybe TransitGatewayRouteTableRoute
transitGatewayRouteTableRoute :: Prelude.Maybe TransitGatewayRouteTableRoute,
    -- | The component VPC.
    PathComponent -> Maybe AnalysisComponent
vpc :: Prelude.Maybe AnalysisComponent
  }
  deriving (PathComponent -> PathComponent -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PathComponent -> PathComponent -> Bool
$c/= :: PathComponent -> PathComponent -> Bool
== :: PathComponent -> PathComponent -> Bool
$c== :: PathComponent -> PathComponent -> Bool
Prelude.Eq, ReadPrec [PathComponent]
ReadPrec PathComponent
Int -> ReadS PathComponent
ReadS [PathComponent]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PathComponent]
$creadListPrec :: ReadPrec [PathComponent]
readPrec :: ReadPrec PathComponent
$creadPrec :: ReadPrec PathComponent
readList :: ReadS [PathComponent]
$creadList :: ReadS [PathComponent]
readsPrec :: Int -> ReadS PathComponent
$creadsPrec :: Int -> ReadS PathComponent
Prelude.Read, Int -> PathComponent -> ShowS
[PathComponent] -> ShowS
PathComponent -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PathComponent] -> ShowS
$cshowList :: [PathComponent] -> ShowS
show :: PathComponent -> String
$cshow :: PathComponent -> String
showsPrec :: Int -> PathComponent -> ShowS
$cshowsPrec :: Int -> PathComponent -> ShowS
Prelude.Show, forall x. Rep PathComponent x -> PathComponent
forall x. PathComponent -> Rep PathComponent x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PathComponent x -> PathComponent
$cfrom :: forall x. PathComponent -> Rep PathComponent x
Prelude.Generic)

-- |
-- Create a value of 'PathComponent' 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:
--
-- 'aclRule', 'pathComponent_aclRule' - The network ACL rule.
--
-- 'additionalDetails', 'pathComponent_additionalDetails' - The additional details.
--
-- 'attachedTo', 'pathComponent_attachedTo' - The resource to which the path component is attached.
--
-- 'component', 'pathComponent_component' - The component.
--
-- 'destinationVpc', 'pathComponent_destinationVpc' - The destination VPC.
--
-- 'elasticLoadBalancerListener', 'pathComponent_elasticLoadBalancerListener' - The load balancer listener.
--
-- 'explanations', 'pathComponent_explanations' - The explanation codes.
--
-- 'inboundHeader', 'pathComponent_inboundHeader' - The inbound header.
--
-- 'outboundHeader', 'pathComponent_outboundHeader' - The outbound header.
--
-- 'routeTableRoute', 'pathComponent_routeTableRoute' - The route table route.
--
-- 'securityGroupRule', 'pathComponent_securityGroupRule' - The security group rule.
--
-- 'sequenceNumber', 'pathComponent_sequenceNumber' - The sequence number.
--
-- 'sourceVpc', 'pathComponent_sourceVpc' - The source VPC.
--
-- 'subnet', 'pathComponent_subnet' - The subnet.
--
-- 'transitGateway', 'pathComponent_transitGateway' - The transit gateway.
--
-- 'transitGatewayRouteTableRoute', 'pathComponent_transitGatewayRouteTableRoute' - The route in a transit gateway route table.
--
-- 'vpc', 'pathComponent_vpc' - The component VPC.
newPathComponent ::
  PathComponent
newPathComponent :: PathComponent
newPathComponent =
  PathComponent'
    { $sel:aclRule:PathComponent' :: Maybe AnalysisAclRule
aclRule = forall a. Maybe a
Prelude.Nothing,
      $sel:additionalDetails:PathComponent' :: Maybe [AdditionalDetail]
additionalDetails = forall a. Maybe a
Prelude.Nothing,
      $sel:attachedTo:PathComponent' :: Maybe AnalysisComponent
attachedTo = forall a. Maybe a
Prelude.Nothing,
      $sel:component:PathComponent' :: Maybe AnalysisComponent
component = forall a. Maybe a
Prelude.Nothing,
      $sel:destinationVpc:PathComponent' :: Maybe AnalysisComponent
destinationVpc = forall a. Maybe a
Prelude.Nothing,
      $sel:elasticLoadBalancerListener:PathComponent' :: Maybe AnalysisComponent
elasticLoadBalancerListener = forall a. Maybe a
Prelude.Nothing,
      $sel:explanations:PathComponent' :: Maybe [Explanation]
explanations = forall a. Maybe a
Prelude.Nothing,
      $sel:inboundHeader:PathComponent' :: Maybe AnalysisPacketHeader
inboundHeader = forall a. Maybe a
Prelude.Nothing,
      $sel:outboundHeader:PathComponent' :: Maybe AnalysisPacketHeader
outboundHeader = forall a. Maybe a
Prelude.Nothing,
      $sel:routeTableRoute:PathComponent' :: Maybe AnalysisRouteTableRoute
routeTableRoute = forall a. Maybe a
Prelude.Nothing,
      $sel:securityGroupRule:PathComponent' :: Maybe AnalysisSecurityGroupRule
securityGroupRule = forall a. Maybe a
Prelude.Nothing,
      $sel:sequenceNumber:PathComponent' :: Maybe Int
sequenceNumber = forall a. Maybe a
Prelude.Nothing,
      $sel:sourceVpc:PathComponent' :: Maybe AnalysisComponent
sourceVpc = forall a. Maybe a
Prelude.Nothing,
      $sel:subnet:PathComponent' :: Maybe AnalysisComponent
subnet = forall a. Maybe a
Prelude.Nothing,
      $sel:transitGateway:PathComponent' :: Maybe AnalysisComponent
transitGateway = forall a. Maybe a
Prelude.Nothing,
      $sel:transitGatewayRouteTableRoute:PathComponent' :: Maybe TransitGatewayRouteTableRoute
transitGatewayRouteTableRoute = forall a. Maybe a
Prelude.Nothing,
      $sel:vpc:PathComponent' :: Maybe AnalysisComponent
vpc = forall a. Maybe a
Prelude.Nothing
    }

-- | The network ACL rule.
pathComponent_aclRule :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisAclRule)
pathComponent_aclRule :: Lens' PathComponent (Maybe AnalysisAclRule)
pathComponent_aclRule = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisAclRule
aclRule :: Maybe AnalysisAclRule
$sel:aclRule:PathComponent' :: PathComponent -> Maybe AnalysisAclRule
aclRule} -> Maybe AnalysisAclRule
aclRule) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisAclRule
a -> PathComponent
s {$sel:aclRule:PathComponent' :: Maybe AnalysisAclRule
aclRule = Maybe AnalysisAclRule
a} :: PathComponent)

-- | The additional details.
pathComponent_additionalDetails :: Lens.Lens' PathComponent (Prelude.Maybe [AdditionalDetail])
pathComponent_additionalDetails :: Lens' PathComponent (Maybe [AdditionalDetail])
pathComponent_additionalDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe [AdditionalDetail]
additionalDetails :: Maybe [AdditionalDetail]
$sel:additionalDetails:PathComponent' :: PathComponent -> Maybe [AdditionalDetail]
additionalDetails} -> Maybe [AdditionalDetail]
additionalDetails) (\s :: PathComponent
s@PathComponent' {} Maybe [AdditionalDetail]
a -> PathComponent
s {$sel:additionalDetails:PathComponent' :: Maybe [AdditionalDetail]
additionalDetails = Maybe [AdditionalDetail]
a} :: PathComponent) 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 resource to which the path component is attached.
pathComponent_attachedTo :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
pathComponent_attachedTo :: Lens' PathComponent (Maybe AnalysisComponent)
pathComponent_attachedTo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisComponent
attachedTo :: Maybe AnalysisComponent
$sel:attachedTo:PathComponent' :: PathComponent -> Maybe AnalysisComponent
attachedTo} -> Maybe AnalysisComponent
attachedTo) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisComponent
a -> PathComponent
s {$sel:attachedTo:PathComponent' :: Maybe AnalysisComponent
attachedTo = Maybe AnalysisComponent
a} :: PathComponent)

-- | The component.
pathComponent_component :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
pathComponent_component :: Lens' PathComponent (Maybe AnalysisComponent)
pathComponent_component = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisComponent
component :: Maybe AnalysisComponent
$sel:component:PathComponent' :: PathComponent -> Maybe AnalysisComponent
component} -> Maybe AnalysisComponent
component) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisComponent
a -> PathComponent
s {$sel:component:PathComponent' :: Maybe AnalysisComponent
component = Maybe AnalysisComponent
a} :: PathComponent)

-- | The destination VPC.
pathComponent_destinationVpc :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
pathComponent_destinationVpc :: Lens' PathComponent (Maybe AnalysisComponent)
pathComponent_destinationVpc = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisComponent
destinationVpc :: Maybe AnalysisComponent
$sel:destinationVpc:PathComponent' :: PathComponent -> Maybe AnalysisComponent
destinationVpc} -> Maybe AnalysisComponent
destinationVpc) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisComponent
a -> PathComponent
s {$sel:destinationVpc:PathComponent' :: Maybe AnalysisComponent
destinationVpc = Maybe AnalysisComponent
a} :: PathComponent)

-- | The load balancer listener.
pathComponent_elasticLoadBalancerListener :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
pathComponent_elasticLoadBalancerListener :: Lens' PathComponent (Maybe AnalysisComponent)
pathComponent_elasticLoadBalancerListener = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisComponent
elasticLoadBalancerListener :: Maybe AnalysisComponent
$sel:elasticLoadBalancerListener:PathComponent' :: PathComponent -> Maybe AnalysisComponent
elasticLoadBalancerListener} -> Maybe AnalysisComponent
elasticLoadBalancerListener) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisComponent
a -> PathComponent
s {$sel:elasticLoadBalancerListener:PathComponent' :: Maybe AnalysisComponent
elasticLoadBalancerListener = Maybe AnalysisComponent
a} :: PathComponent)

-- | The explanation codes.
pathComponent_explanations :: Lens.Lens' PathComponent (Prelude.Maybe [Explanation])
pathComponent_explanations :: Lens' PathComponent (Maybe [Explanation])
pathComponent_explanations = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe [Explanation]
explanations :: Maybe [Explanation]
$sel:explanations:PathComponent' :: PathComponent -> Maybe [Explanation]
explanations} -> Maybe [Explanation]
explanations) (\s :: PathComponent
s@PathComponent' {} Maybe [Explanation]
a -> PathComponent
s {$sel:explanations:PathComponent' :: Maybe [Explanation]
explanations = Maybe [Explanation]
a} :: PathComponent) 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 inbound header.
pathComponent_inboundHeader :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisPacketHeader)
pathComponent_inboundHeader :: Lens' PathComponent (Maybe AnalysisPacketHeader)
pathComponent_inboundHeader = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisPacketHeader
inboundHeader :: Maybe AnalysisPacketHeader
$sel:inboundHeader:PathComponent' :: PathComponent -> Maybe AnalysisPacketHeader
inboundHeader} -> Maybe AnalysisPacketHeader
inboundHeader) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisPacketHeader
a -> PathComponent
s {$sel:inboundHeader:PathComponent' :: Maybe AnalysisPacketHeader
inboundHeader = Maybe AnalysisPacketHeader
a} :: PathComponent)

-- | The outbound header.
pathComponent_outboundHeader :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisPacketHeader)
pathComponent_outboundHeader :: Lens' PathComponent (Maybe AnalysisPacketHeader)
pathComponent_outboundHeader = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisPacketHeader
outboundHeader :: Maybe AnalysisPacketHeader
$sel:outboundHeader:PathComponent' :: PathComponent -> Maybe AnalysisPacketHeader
outboundHeader} -> Maybe AnalysisPacketHeader
outboundHeader) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisPacketHeader
a -> PathComponent
s {$sel:outboundHeader:PathComponent' :: Maybe AnalysisPacketHeader
outboundHeader = Maybe AnalysisPacketHeader
a} :: PathComponent)

-- | The route table route.
pathComponent_routeTableRoute :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisRouteTableRoute)
pathComponent_routeTableRoute :: Lens' PathComponent (Maybe AnalysisRouteTableRoute)
pathComponent_routeTableRoute = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisRouteTableRoute
routeTableRoute :: Maybe AnalysisRouteTableRoute
$sel:routeTableRoute:PathComponent' :: PathComponent -> Maybe AnalysisRouteTableRoute
routeTableRoute} -> Maybe AnalysisRouteTableRoute
routeTableRoute) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisRouteTableRoute
a -> PathComponent
s {$sel:routeTableRoute:PathComponent' :: Maybe AnalysisRouteTableRoute
routeTableRoute = Maybe AnalysisRouteTableRoute
a} :: PathComponent)

-- | The security group rule.
pathComponent_securityGroupRule :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisSecurityGroupRule)
pathComponent_securityGroupRule :: Lens' PathComponent (Maybe AnalysisSecurityGroupRule)
pathComponent_securityGroupRule = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisSecurityGroupRule
securityGroupRule :: Maybe AnalysisSecurityGroupRule
$sel:securityGroupRule:PathComponent' :: PathComponent -> Maybe AnalysisSecurityGroupRule
securityGroupRule} -> Maybe AnalysisSecurityGroupRule
securityGroupRule) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisSecurityGroupRule
a -> PathComponent
s {$sel:securityGroupRule:PathComponent' :: Maybe AnalysisSecurityGroupRule
securityGroupRule = Maybe AnalysisSecurityGroupRule
a} :: PathComponent)

-- | The sequence number.
pathComponent_sequenceNumber :: Lens.Lens' PathComponent (Prelude.Maybe Prelude.Int)
pathComponent_sequenceNumber :: Lens' PathComponent (Maybe Int)
pathComponent_sequenceNumber = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe Int
sequenceNumber :: Maybe Int
$sel:sequenceNumber:PathComponent' :: PathComponent -> Maybe Int
sequenceNumber} -> Maybe Int
sequenceNumber) (\s :: PathComponent
s@PathComponent' {} Maybe Int
a -> PathComponent
s {$sel:sequenceNumber:PathComponent' :: Maybe Int
sequenceNumber = Maybe Int
a} :: PathComponent)

-- | The source VPC.
pathComponent_sourceVpc :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
pathComponent_sourceVpc :: Lens' PathComponent (Maybe AnalysisComponent)
pathComponent_sourceVpc = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisComponent
sourceVpc :: Maybe AnalysisComponent
$sel:sourceVpc:PathComponent' :: PathComponent -> Maybe AnalysisComponent
sourceVpc} -> Maybe AnalysisComponent
sourceVpc) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisComponent
a -> PathComponent
s {$sel:sourceVpc:PathComponent' :: Maybe AnalysisComponent
sourceVpc = Maybe AnalysisComponent
a} :: PathComponent)

-- | The subnet.
pathComponent_subnet :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
pathComponent_subnet :: Lens' PathComponent (Maybe AnalysisComponent)
pathComponent_subnet = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisComponent
subnet :: Maybe AnalysisComponent
$sel:subnet:PathComponent' :: PathComponent -> Maybe AnalysisComponent
subnet} -> Maybe AnalysisComponent
subnet) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisComponent
a -> PathComponent
s {$sel:subnet:PathComponent' :: Maybe AnalysisComponent
subnet = Maybe AnalysisComponent
a} :: PathComponent)

-- | The transit gateway.
pathComponent_transitGateway :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
pathComponent_transitGateway :: Lens' PathComponent (Maybe AnalysisComponent)
pathComponent_transitGateway = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisComponent
transitGateway :: Maybe AnalysisComponent
$sel:transitGateway:PathComponent' :: PathComponent -> Maybe AnalysisComponent
transitGateway} -> Maybe AnalysisComponent
transitGateway) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisComponent
a -> PathComponent
s {$sel:transitGateway:PathComponent' :: Maybe AnalysisComponent
transitGateway = Maybe AnalysisComponent
a} :: PathComponent)

-- | The route in a transit gateway route table.
pathComponent_transitGatewayRouteTableRoute :: Lens.Lens' PathComponent (Prelude.Maybe TransitGatewayRouteTableRoute)
pathComponent_transitGatewayRouteTableRoute :: Lens' PathComponent (Maybe TransitGatewayRouteTableRoute)
pathComponent_transitGatewayRouteTableRoute = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe TransitGatewayRouteTableRoute
transitGatewayRouteTableRoute :: Maybe TransitGatewayRouteTableRoute
$sel:transitGatewayRouteTableRoute:PathComponent' :: PathComponent -> Maybe TransitGatewayRouteTableRoute
transitGatewayRouteTableRoute} -> Maybe TransitGatewayRouteTableRoute
transitGatewayRouteTableRoute) (\s :: PathComponent
s@PathComponent' {} Maybe TransitGatewayRouteTableRoute
a -> PathComponent
s {$sel:transitGatewayRouteTableRoute:PathComponent' :: Maybe TransitGatewayRouteTableRoute
transitGatewayRouteTableRoute = Maybe TransitGatewayRouteTableRoute
a} :: PathComponent)

-- | The component VPC.
pathComponent_vpc :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
pathComponent_vpc :: Lens' PathComponent (Maybe AnalysisComponent)
pathComponent_vpc = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathComponent' {Maybe AnalysisComponent
vpc :: Maybe AnalysisComponent
$sel:vpc:PathComponent' :: PathComponent -> Maybe AnalysisComponent
vpc} -> Maybe AnalysisComponent
vpc) (\s :: PathComponent
s@PathComponent' {} Maybe AnalysisComponent
a -> PathComponent
s {$sel:vpc:PathComponent' :: Maybe AnalysisComponent
vpc = Maybe AnalysisComponent
a} :: PathComponent)

instance Data.FromXML PathComponent where
  parseXML :: [Node] -> Either String PathComponent
parseXML [Node]
x =
    Maybe AnalysisAclRule
-> Maybe [AdditionalDetail]
-> Maybe AnalysisComponent
-> Maybe AnalysisComponent
-> Maybe AnalysisComponent
-> Maybe AnalysisComponent
-> Maybe [Explanation]
-> Maybe AnalysisPacketHeader
-> Maybe AnalysisPacketHeader
-> Maybe AnalysisRouteTableRoute
-> Maybe AnalysisSecurityGroupRule
-> Maybe Int
-> Maybe AnalysisComponent
-> Maybe AnalysisComponent
-> Maybe AnalysisComponent
-> Maybe TransitGatewayRouteTableRoute
-> Maybe AnalysisComponent
-> PathComponent
PathComponent'
      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
"aclRule")
      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
"additionalDetailSet"
                      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
"attachedTo")
      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
"component")
      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
"destinationVpc")
      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
"elasticLoadBalancerListener")
      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
"explanationSet"
                      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
"inboundHeader")
      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
"outboundHeader")
      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
"routeTableRoute")
      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
"securityGroupRule")
      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
"sequenceNumber")
      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
"sourceVpc")
      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
"subnet")
      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
"transitGateway")
      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
"transitGatewayRouteTableRoute")
      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
"vpc")

instance Prelude.Hashable PathComponent where
  hashWithSalt :: Int -> PathComponent -> Int
hashWithSalt Int
_salt PathComponent' {Maybe Int
Maybe [AdditionalDetail]
Maybe [Explanation]
Maybe AnalysisComponent
Maybe AnalysisRouteTableRoute
Maybe AnalysisSecurityGroupRule
Maybe AnalysisPacketHeader
Maybe AnalysisAclRule
Maybe TransitGatewayRouteTableRoute
vpc :: Maybe AnalysisComponent
transitGatewayRouteTableRoute :: Maybe TransitGatewayRouteTableRoute
transitGateway :: Maybe AnalysisComponent
subnet :: Maybe AnalysisComponent
sourceVpc :: Maybe AnalysisComponent
sequenceNumber :: Maybe Int
securityGroupRule :: Maybe AnalysisSecurityGroupRule
routeTableRoute :: Maybe AnalysisRouteTableRoute
outboundHeader :: Maybe AnalysisPacketHeader
inboundHeader :: Maybe AnalysisPacketHeader
explanations :: Maybe [Explanation]
elasticLoadBalancerListener :: Maybe AnalysisComponent
destinationVpc :: Maybe AnalysisComponent
component :: Maybe AnalysisComponent
attachedTo :: Maybe AnalysisComponent
additionalDetails :: Maybe [AdditionalDetail]
aclRule :: Maybe AnalysisAclRule
$sel:vpc:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:transitGatewayRouteTableRoute:PathComponent' :: PathComponent -> Maybe TransitGatewayRouteTableRoute
$sel:transitGateway:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:subnet:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:sourceVpc:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:sequenceNumber:PathComponent' :: PathComponent -> Maybe Int
$sel:securityGroupRule:PathComponent' :: PathComponent -> Maybe AnalysisSecurityGroupRule
$sel:routeTableRoute:PathComponent' :: PathComponent -> Maybe AnalysisRouteTableRoute
$sel:outboundHeader:PathComponent' :: PathComponent -> Maybe AnalysisPacketHeader
$sel:inboundHeader:PathComponent' :: PathComponent -> Maybe AnalysisPacketHeader
$sel:explanations:PathComponent' :: PathComponent -> Maybe [Explanation]
$sel:elasticLoadBalancerListener:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:destinationVpc:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:component:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:attachedTo:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:additionalDetails:PathComponent' :: PathComponent -> Maybe [AdditionalDetail]
$sel:aclRule:PathComponent' :: PathComponent -> Maybe AnalysisAclRule
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisAclRule
aclRule
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AdditionalDetail]
additionalDetails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisComponent
attachedTo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisComponent
component
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisComponent
destinationVpc
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisComponent
elasticLoadBalancerListener
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Explanation]
explanations
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisPacketHeader
inboundHeader
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisPacketHeader
outboundHeader
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisRouteTableRoute
routeTableRoute
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisSecurityGroupRule
securityGroupRule
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
sequenceNumber
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisComponent
sourceVpc
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisComponent
subnet
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisComponent
transitGateway
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TransitGatewayRouteTableRoute
transitGatewayRouteTableRoute
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AnalysisComponent
vpc

instance Prelude.NFData PathComponent where
  rnf :: PathComponent -> ()
rnf PathComponent' {Maybe Int
Maybe [AdditionalDetail]
Maybe [Explanation]
Maybe AnalysisComponent
Maybe AnalysisRouteTableRoute
Maybe AnalysisSecurityGroupRule
Maybe AnalysisPacketHeader
Maybe AnalysisAclRule
Maybe TransitGatewayRouteTableRoute
vpc :: Maybe AnalysisComponent
transitGatewayRouteTableRoute :: Maybe TransitGatewayRouteTableRoute
transitGateway :: Maybe AnalysisComponent
subnet :: Maybe AnalysisComponent
sourceVpc :: Maybe AnalysisComponent
sequenceNumber :: Maybe Int
securityGroupRule :: Maybe AnalysisSecurityGroupRule
routeTableRoute :: Maybe AnalysisRouteTableRoute
outboundHeader :: Maybe AnalysisPacketHeader
inboundHeader :: Maybe AnalysisPacketHeader
explanations :: Maybe [Explanation]
elasticLoadBalancerListener :: Maybe AnalysisComponent
destinationVpc :: Maybe AnalysisComponent
component :: Maybe AnalysisComponent
attachedTo :: Maybe AnalysisComponent
additionalDetails :: Maybe [AdditionalDetail]
aclRule :: Maybe AnalysisAclRule
$sel:vpc:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:transitGatewayRouteTableRoute:PathComponent' :: PathComponent -> Maybe TransitGatewayRouteTableRoute
$sel:transitGateway:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:subnet:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:sourceVpc:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:sequenceNumber:PathComponent' :: PathComponent -> Maybe Int
$sel:securityGroupRule:PathComponent' :: PathComponent -> Maybe AnalysisSecurityGroupRule
$sel:routeTableRoute:PathComponent' :: PathComponent -> Maybe AnalysisRouteTableRoute
$sel:outboundHeader:PathComponent' :: PathComponent -> Maybe AnalysisPacketHeader
$sel:inboundHeader:PathComponent' :: PathComponent -> Maybe AnalysisPacketHeader
$sel:explanations:PathComponent' :: PathComponent -> Maybe [Explanation]
$sel:elasticLoadBalancerListener:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:destinationVpc:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:component:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:attachedTo:PathComponent' :: PathComponent -> Maybe AnalysisComponent
$sel:additionalDetails:PathComponent' :: PathComponent -> Maybe [AdditionalDetail]
$sel:aclRule:PathComponent' :: PathComponent -> Maybe AnalysisAclRule
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisAclRule
aclRule
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [AdditionalDetail]
additionalDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisComponent
attachedTo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisComponent
component
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisComponent
destinationVpc
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisComponent
elasticLoadBalancerListener
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Explanation]
explanations
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisPacketHeader
inboundHeader
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisPacketHeader
outboundHeader
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisRouteTableRoute
routeTableRoute
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisSecurityGroupRule
securityGroupRule
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
sequenceNumber
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisComponent
sourceVpc
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisComponent
subnet
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisComponent
transitGateway
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf
        Maybe TransitGatewayRouteTableRoute
transitGatewayRouteTableRoute
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AnalysisComponent
vpc