{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.SES.DescribeReceiptRuleSet
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns the details of the specified receipt rule set.
--
-- For information about managing receipt rule sets, see the
-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-managing-receipt-rule-sets.html Amazon SES Developer Guide>.
--
-- You can execute this operation no more than once per second.
module Amazonka.SES.DescribeReceiptRuleSet
  ( -- * Creating a Request
    DescribeReceiptRuleSet (..),
    newDescribeReceiptRuleSet,

    -- * Request Lenses
    describeReceiptRuleSet_ruleSetName,

    -- * Destructuring the Response
    DescribeReceiptRuleSetResponse (..),
    newDescribeReceiptRuleSetResponse,

    -- * Response Lenses
    describeReceiptRuleSetResponse_metadata,
    describeReceiptRuleSetResponse_rules,
    describeReceiptRuleSetResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.SES.Types

-- | Represents a request to return the details of a receipt rule set. You
-- use receipt rule sets to receive email with Amazon SES. For more
-- information, see the
-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-concepts.html Amazon SES Developer Guide>.
--
-- /See:/ 'newDescribeReceiptRuleSet' smart constructor.
data DescribeReceiptRuleSet = DescribeReceiptRuleSet'
  { -- | The name of the receipt rule set to describe.
    DescribeReceiptRuleSet -> Text
ruleSetName :: Prelude.Text
  }
  deriving (DescribeReceiptRuleSet -> DescribeReceiptRuleSet -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeReceiptRuleSet -> DescribeReceiptRuleSet -> Bool
$c/= :: DescribeReceiptRuleSet -> DescribeReceiptRuleSet -> Bool
== :: DescribeReceiptRuleSet -> DescribeReceiptRuleSet -> Bool
$c== :: DescribeReceiptRuleSet -> DescribeReceiptRuleSet -> Bool
Prelude.Eq, ReadPrec [DescribeReceiptRuleSet]
ReadPrec DescribeReceiptRuleSet
Int -> ReadS DescribeReceiptRuleSet
ReadS [DescribeReceiptRuleSet]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeReceiptRuleSet]
$creadListPrec :: ReadPrec [DescribeReceiptRuleSet]
readPrec :: ReadPrec DescribeReceiptRuleSet
$creadPrec :: ReadPrec DescribeReceiptRuleSet
readList :: ReadS [DescribeReceiptRuleSet]
$creadList :: ReadS [DescribeReceiptRuleSet]
readsPrec :: Int -> ReadS DescribeReceiptRuleSet
$creadsPrec :: Int -> ReadS DescribeReceiptRuleSet
Prelude.Read, Int -> DescribeReceiptRuleSet -> ShowS
[DescribeReceiptRuleSet] -> ShowS
DescribeReceiptRuleSet -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeReceiptRuleSet] -> ShowS
$cshowList :: [DescribeReceiptRuleSet] -> ShowS
show :: DescribeReceiptRuleSet -> String
$cshow :: DescribeReceiptRuleSet -> String
showsPrec :: Int -> DescribeReceiptRuleSet -> ShowS
$cshowsPrec :: Int -> DescribeReceiptRuleSet -> ShowS
Prelude.Show, forall x. Rep DescribeReceiptRuleSet x -> DescribeReceiptRuleSet
forall x. DescribeReceiptRuleSet -> Rep DescribeReceiptRuleSet x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeReceiptRuleSet x -> DescribeReceiptRuleSet
$cfrom :: forall x. DescribeReceiptRuleSet -> Rep DescribeReceiptRuleSet x
Prelude.Generic)

-- |
-- Create a value of 'DescribeReceiptRuleSet' 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:
--
-- 'ruleSetName', 'describeReceiptRuleSet_ruleSetName' - The name of the receipt rule set to describe.
newDescribeReceiptRuleSet ::
  -- | 'ruleSetName'
  Prelude.Text ->
  DescribeReceiptRuleSet
newDescribeReceiptRuleSet :: Text -> DescribeReceiptRuleSet
newDescribeReceiptRuleSet Text
pRuleSetName_ =
  DescribeReceiptRuleSet'
    { $sel:ruleSetName:DescribeReceiptRuleSet' :: Text
ruleSetName =
        Text
pRuleSetName_
    }

-- | The name of the receipt rule set to describe.
describeReceiptRuleSet_ruleSetName :: Lens.Lens' DescribeReceiptRuleSet Prelude.Text
describeReceiptRuleSet_ruleSetName :: Lens' DescribeReceiptRuleSet Text
describeReceiptRuleSet_ruleSetName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeReceiptRuleSet' {Text
ruleSetName :: Text
$sel:ruleSetName:DescribeReceiptRuleSet' :: DescribeReceiptRuleSet -> Text
ruleSetName} -> Text
ruleSetName) (\s :: DescribeReceiptRuleSet
s@DescribeReceiptRuleSet' {} Text
a -> DescribeReceiptRuleSet
s {$sel:ruleSetName:DescribeReceiptRuleSet' :: Text
ruleSetName = Text
a} :: DescribeReceiptRuleSet)

instance Core.AWSRequest DescribeReceiptRuleSet where
  type
    AWSResponse DescribeReceiptRuleSet =
      DescribeReceiptRuleSetResponse
  request :: (Service -> Service)
-> DescribeReceiptRuleSet -> Request DescribeReceiptRuleSet
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeReceiptRuleSet
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeReceiptRuleSet)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXMLWrapper
      Text
"DescribeReceiptRuleSetResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe ReceiptRuleSetMetadata
-> Maybe [ReceiptRule] -> Int -> DescribeReceiptRuleSetResponse
DescribeReceiptRuleSetResponse'
            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
"Metadata")
            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
"Rules"
                            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
"member")
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable DescribeReceiptRuleSet where
  hashWithSalt :: Int -> DescribeReceiptRuleSet -> Int
hashWithSalt Int
_salt DescribeReceiptRuleSet' {Text
ruleSetName :: Text
$sel:ruleSetName:DescribeReceiptRuleSet' :: DescribeReceiptRuleSet -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
ruleSetName

instance Prelude.NFData DescribeReceiptRuleSet where
  rnf :: DescribeReceiptRuleSet -> ()
rnf DescribeReceiptRuleSet' {Text
ruleSetName :: Text
$sel:ruleSetName:DescribeReceiptRuleSet' :: DescribeReceiptRuleSet -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
ruleSetName

instance Data.ToHeaders DescribeReceiptRuleSet where
  toHeaders :: DescribeReceiptRuleSet -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath DescribeReceiptRuleSet where
  toPath :: DescribeReceiptRuleSet -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery DescribeReceiptRuleSet where
  toQuery :: DescribeReceiptRuleSet -> QueryString
toQuery DescribeReceiptRuleSet' {Text
ruleSetName :: Text
$sel:ruleSetName:DescribeReceiptRuleSet' :: DescribeReceiptRuleSet -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"DescribeReceiptRuleSet" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2010-12-01" :: Prelude.ByteString),
        ByteString
"RuleSetName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
ruleSetName
      ]

-- | Represents the details of the specified receipt rule set.
--
-- /See:/ 'newDescribeReceiptRuleSetResponse' smart constructor.
data DescribeReceiptRuleSetResponse = DescribeReceiptRuleSetResponse'
  { -- | The metadata for the receipt rule set, which consists of the rule set
    -- name and the timestamp of when the rule set was created.
    DescribeReceiptRuleSetResponse -> Maybe ReceiptRuleSetMetadata
metadata :: Prelude.Maybe ReceiptRuleSetMetadata,
    -- | A list of the receipt rules that belong to the specified receipt rule
    -- set.
    DescribeReceiptRuleSetResponse -> Maybe [ReceiptRule]
rules :: Prelude.Maybe [ReceiptRule],
    -- | The response's http status code.
    DescribeReceiptRuleSetResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeReceiptRuleSetResponse
-> DescribeReceiptRuleSetResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeReceiptRuleSetResponse
-> DescribeReceiptRuleSetResponse -> Bool
$c/= :: DescribeReceiptRuleSetResponse
-> DescribeReceiptRuleSetResponse -> Bool
== :: DescribeReceiptRuleSetResponse
-> DescribeReceiptRuleSetResponse -> Bool
$c== :: DescribeReceiptRuleSetResponse
-> DescribeReceiptRuleSetResponse -> Bool
Prelude.Eq, ReadPrec [DescribeReceiptRuleSetResponse]
ReadPrec DescribeReceiptRuleSetResponse
Int -> ReadS DescribeReceiptRuleSetResponse
ReadS [DescribeReceiptRuleSetResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeReceiptRuleSetResponse]
$creadListPrec :: ReadPrec [DescribeReceiptRuleSetResponse]
readPrec :: ReadPrec DescribeReceiptRuleSetResponse
$creadPrec :: ReadPrec DescribeReceiptRuleSetResponse
readList :: ReadS [DescribeReceiptRuleSetResponse]
$creadList :: ReadS [DescribeReceiptRuleSetResponse]
readsPrec :: Int -> ReadS DescribeReceiptRuleSetResponse
$creadsPrec :: Int -> ReadS DescribeReceiptRuleSetResponse
Prelude.Read, Int -> DescribeReceiptRuleSetResponse -> ShowS
[DescribeReceiptRuleSetResponse] -> ShowS
DescribeReceiptRuleSetResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeReceiptRuleSetResponse] -> ShowS
$cshowList :: [DescribeReceiptRuleSetResponse] -> ShowS
show :: DescribeReceiptRuleSetResponse -> String
$cshow :: DescribeReceiptRuleSetResponse -> String
showsPrec :: Int -> DescribeReceiptRuleSetResponse -> ShowS
$cshowsPrec :: Int -> DescribeReceiptRuleSetResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeReceiptRuleSetResponse x
-> DescribeReceiptRuleSetResponse
forall x.
DescribeReceiptRuleSetResponse
-> Rep DescribeReceiptRuleSetResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeReceiptRuleSetResponse x
-> DescribeReceiptRuleSetResponse
$cfrom :: forall x.
DescribeReceiptRuleSetResponse
-> Rep DescribeReceiptRuleSetResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeReceiptRuleSetResponse' 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:
--
-- 'metadata', 'describeReceiptRuleSetResponse_metadata' - The metadata for the receipt rule set, which consists of the rule set
-- name and the timestamp of when the rule set was created.
--
-- 'rules', 'describeReceiptRuleSetResponse_rules' - A list of the receipt rules that belong to the specified receipt rule
-- set.
--
-- 'httpStatus', 'describeReceiptRuleSetResponse_httpStatus' - The response's http status code.
newDescribeReceiptRuleSetResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeReceiptRuleSetResponse
newDescribeReceiptRuleSetResponse :: Int -> DescribeReceiptRuleSetResponse
newDescribeReceiptRuleSetResponse Int
pHttpStatus_ =
  DescribeReceiptRuleSetResponse'
    { $sel:metadata:DescribeReceiptRuleSetResponse' :: Maybe ReceiptRuleSetMetadata
metadata =
        forall a. Maybe a
Prelude.Nothing,
      $sel:rules:DescribeReceiptRuleSetResponse' :: Maybe [ReceiptRule]
rules = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeReceiptRuleSetResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The metadata for the receipt rule set, which consists of the rule set
-- name and the timestamp of when the rule set was created.
describeReceiptRuleSetResponse_metadata :: Lens.Lens' DescribeReceiptRuleSetResponse (Prelude.Maybe ReceiptRuleSetMetadata)
describeReceiptRuleSetResponse_metadata :: Lens' DescribeReceiptRuleSetResponse (Maybe ReceiptRuleSetMetadata)
describeReceiptRuleSetResponse_metadata = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeReceiptRuleSetResponse' {Maybe ReceiptRuleSetMetadata
metadata :: Maybe ReceiptRuleSetMetadata
$sel:metadata:DescribeReceiptRuleSetResponse' :: DescribeReceiptRuleSetResponse -> Maybe ReceiptRuleSetMetadata
metadata} -> Maybe ReceiptRuleSetMetadata
metadata) (\s :: DescribeReceiptRuleSetResponse
s@DescribeReceiptRuleSetResponse' {} Maybe ReceiptRuleSetMetadata
a -> DescribeReceiptRuleSetResponse
s {$sel:metadata:DescribeReceiptRuleSetResponse' :: Maybe ReceiptRuleSetMetadata
metadata = Maybe ReceiptRuleSetMetadata
a} :: DescribeReceiptRuleSetResponse)

-- | A list of the receipt rules that belong to the specified receipt rule
-- set.
describeReceiptRuleSetResponse_rules :: Lens.Lens' DescribeReceiptRuleSetResponse (Prelude.Maybe [ReceiptRule])
describeReceiptRuleSetResponse_rules :: Lens' DescribeReceiptRuleSetResponse (Maybe [ReceiptRule])
describeReceiptRuleSetResponse_rules = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeReceiptRuleSetResponse' {Maybe [ReceiptRule]
rules :: Maybe [ReceiptRule]
$sel:rules:DescribeReceiptRuleSetResponse' :: DescribeReceiptRuleSetResponse -> Maybe [ReceiptRule]
rules} -> Maybe [ReceiptRule]
rules) (\s :: DescribeReceiptRuleSetResponse
s@DescribeReceiptRuleSetResponse' {} Maybe [ReceiptRule]
a -> DescribeReceiptRuleSetResponse
s {$sel:rules:DescribeReceiptRuleSetResponse' :: Maybe [ReceiptRule]
rules = Maybe [ReceiptRule]
a} :: DescribeReceiptRuleSetResponse) 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 response's http status code.
describeReceiptRuleSetResponse_httpStatus :: Lens.Lens' DescribeReceiptRuleSetResponse Prelude.Int
describeReceiptRuleSetResponse_httpStatus :: Lens' DescribeReceiptRuleSetResponse Int
describeReceiptRuleSetResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeReceiptRuleSetResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribeReceiptRuleSetResponse' :: DescribeReceiptRuleSetResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribeReceiptRuleSetResponse
s@DescribeReceiptRuleSetResponse' {} Int
a -> DescribeReceiptRuleSetResponse
s {$sel:httpStatus:DescribeReceiptRuleSetResponse' :: Int
httpStatus = Int
a} :: DescribeReceiptRuleSetResponse)

instance
  Prelude.NFData
    DescribeReceiptRuleSetResponse
  where
  rnf :: DescribeReceiptRuleSetResponse -> ()
rnf DescribeReceiptRuleSetResponse' {Int
Maybe [ReceiptRule]
Maybe ReceiptRuleSetMetadata
httpStatus :: Int
rules :: Maybe [ReceiptRule]
metadata :: Maybe ReceiptRuleSetMetadata
$sel:httpStatus:DescribeReceiptRuleSetResponse' :: DescribeReceiptRuleSetResponse -> Int
$sel:rules:DescribeReceiptRuleSetResponse' :: DescribeReceiptRuleSetResponse -> Maybe [ReceiptRule]
$sel:metadata:DescribeReceiptRuleSetResponse' :: DescribeReceiptRuleSetResponse -> Maybe ReceiptRuleSetMetadata
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ReceiptRuleSetMetadata
metadata
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [ReceiptRule]
rules
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus