{-# 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.PathStatement
-- 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.PathStatement 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.PacketHeaderStatement
import Amazonka.EC2.Types.ResourceStatement
import qualified Amazonka.Prelude as Prelude

-- | Describes a path statement.
--
-- /See:/ 'newPathStatement' smart constructor.
data PathStatement = PathStatement'
  { -- | The packet header statement.
    PathStatement -> Maybe PacketHeaderStatement
packetHeaderStatement :: Prelude.Maybe PacketHeaderStatement,
    -- | The resource statement.
    PathStatement -> Maybe ResourceStatement
resourceStatement :: Prelude.Maybe ResourceStatement
  }
  deriving (PathStatement -> PathStatement -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PathStatement -> PathStatement -> Bool
$c/= :: PathStatement -> PathStatement -> Bool
== :: PathStatement -> PathStatement -> Bool
$c== :: PathStatement -> PathStatement -> Bool
Prelude.Eq, ReadPrec [PathStatement]
ReadPrec PathStatement
Int -> ReadS PathStatement
ReadS [PathStatement]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PathStatement]
$creadListPrec :: ReadPrec [PathStatement]
readPrec :: ReadPrec PathStatement
$creadPrec :: ReadPrec PathStatement
readList :: ReadS [PathStatement]
$creadList :: ReadS [PathStatement]
readsPrec :: Int -> ReadS PathStatement
$creadsPrec :: Int -> ReadS PathStatement
Prelude.Read, Int -> PathStatement -> ShowS
[PathStatement] -> ShowS
PathStatement -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PathStatement] -> ShowS
$cshowList :: [PathStatement] -> ShowS
show :: PathStatement -> String
$cshow :: PathStatement -> String
showsPrec :: Int -> PathStatement -> ShowS
$cshowsPrec :: Int -> PathStatement -> ShowS
Prelude.Show, forall x. Rep PathStatement x -> PathStatement
forall x. PathStatement -> Rep PathStatement x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PathStatement x -> PathStatement
$cfrom :: forall x. PathStatement -> Rep PathStatement x
Prelude.Generic)

-- |
-- Create a value of 'PathStatement' 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:
--
-- 'packetHeaderStatement', 'pathStatement_packetHeaderStatement' - The packet header statement.
--
-- 'resourceStatement', 'pathStatement_resourceStatement' - The resource statement.
newPathStatement ::
  PathStatement
newPathStatement :: PathStatement
newPathStatement =
  PathStatement'
    { $sel:packetHeaderStatement:PathStatement' :: Maybe PacketHeaderStatement
packetHeaderStatement =
        forall a. Maybe a
Prelude.Nothing,
      $sel:resourceStatement:PathStatement' :: Maybe ResourceStatement
resourceStatement = forall a. Maybe a
Prelude.Nothing
    }

-- | The packet header statement.
pathStatement_packetHeaderStatement :: Lens.Lens' PathStatement (Prelude.Maybe PacketHeaderStatement)
pathStatement_packetHeaderStatement :: Lens' PathStatement (Maybe PacketHeaderStatement)
pathStatement_packetHeaderStatement = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathStatement' {Maybe PacketHeaderStatement
packetHeaderStatement :: Maybe PacketHeaderStatement
$sel:packetHeaderStatement:PathStatement' :: PathStatement -> Maybe PacketHeaderStatement
packetHeaderStatement} -> Maybe PacketHeaderStatement
packetHeaderStatement) (\s :: PathStatement
s@PathStatement' {} Maybe PacketHeaderStatement
a -> PathStatement
s {$sel:packetHeaderStatement:PathStatement' :: Maybe PacketHeaderStatement
packetHeaderStatement = Maybe PacketHeaderStatement
a} :: PathStatement)

-- | The resource statement.
pathStatement_resourceStatement :: Lens.Lens' PathStatement (Prelude.Maybe ResourceStatement)
pathStatement_resourceStatement :: Lens' PathStatement (Maybe ResourceStatement)
pathStatement_resourceStatement = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PathStatement' {Maybe ResourceStatement
resourceStatement :: Maybe ResourceStatement
$sel:resourceStatement:PathStatement' :: PathStatement -> Maybe ResourceStatement
resourceStatement} -> Maybe ResourceStatement
resourceStatement) (\s :: PathStatement
s@PathStatement' {} Maybe ResourceStatement
a -> PathStatement
s {$sel:resourceStatement:PathStatement' :: Maybe ResourceStatement
resourceStatement = Maybe ResourceStatement
a} :: PathStatement)

instance Data.FromXML PathStatement where
  parseXML :: [Node] -> Either String PathStatement
parseXML [Node]
x =
    Maybe PacketHeaderStatement
-> Maybe ResourceStatement -> PathStatement
PathStatement'
      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
"packetHeaderStatement")
      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
"resourceStatement")

instance Prelude.Hashable PathStatement where
  hashWithSalt :: Int -> PathStatement -> Int
hashWithSalt Int
_salt PathStatement' {Maybe PacketHeaderStatement
Maybe ResourceStatement
resourceStatement :: Maybe ResourceStatement
packetHeaderStatement :: Maybe PacketHeaderStatement
$sel:resourceStatement:PathStatement' :: PathStatement -> Maybe ResourceStatement
$sel:packetHeaderStatement:PathStatement' :: PathStatement -> Maybe PacketHeaderStatement
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PacketHeaderStatement
packetHeaderStatement
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceStatement
resourceStatement

instance Prelude.NFData PathStatement where
  rnf :: PathStatement -> ()
rnf PathStatement' {Maybe PacketHeaderStatement
Maybe ResourceStatement
resourceStatement :: Maybe ResourceStatement
packetHeaderStatement :: Maybe PacketHeaderStatement
$sel:resourceStatement:PathStatement' :: PathStatement -> Maybe ResourceStatement
$sel:packetHeaderStatement:PathStatement' :: PathStatement -> Maybe PacketHeaderStatement
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe PacketHeaderStatement
packetHeaderStatement
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceStatement
resourceStatement