{-# 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.Kinesis.DescribeStreamConsumer
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- To get the description of a registered consumer, provide the ARN of the
-- consumer. Alternatively, you can provide the ARN of the data stream and
-- the name you gave the consumer when you registered it. You may also
-- provide all three parameters, as long as they don\'t conflict with each
-- other. If you don\'t know the name or ARN of the consumer that you want
-- to describe, you can use the ListStreamConsumers operation to get a list
-- of the descriptions of all the consumers that are currently registered
-- with a given data stream.
--
-- This operation has a limit of 20 transactions per second per stream.
module Amazonka.Kinesis.DescribeStreamConsumer
  ( -- * Creating a Request
    DescribeStreamConsumer (..),
    newDescribeStreamConsumer,

    -- * Request Lenses
    describeStreamConsumer_consumerARN,
    describeStreamConsumer_consumerName,
    describeStreamConsumer_streamARN,

    -- * Destructuring the Response
    DescribeStreamConsumerResponse (..),
    newDescribeStreamConsumerResponse,

    -- * Response Lenses
    describeStreamConsumerResponse_httpStatus,
    describeStreamConsumerResponse_consumerDescription,
  )
where

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

-- | /See:/ 'newDescribeStreamConsumer' smart constructor.
data DescribeStreamConsumer = DescribeStreamConsumer'
  { -- | The ARN returned by Kinesis Data Streams when you registered the
    -- consumer.
    DescribeStreamConsumer -> Maybe Text
consumerARN :: Prelude.Maybe Prelude.Text,
    -- | The name that you gave to the consumer.
    DescribeStreamConsumer -> Maybe Text
consumerName :: Prelude.Maybe Prelude.Text,
    -- | The ARN of the Kinesis data stream that the consumer is registered with.
    -- For more information, see
    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kinesis-streams Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>.
    DescribeStreamConsumer -> Maybe Text
streamARN :: Prelude.Maybe Prelude.Text
  }
  deriving (DescribeStreamConsumer -> DescribeStreamConsumer -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeStreamConsumer -> DescribeStreamConsumer -> Bool
$c/= :: DescribeStreamConsumer -> DescribeStreamConsumer -> Bool
== :: DescribeStreamConsumer -> DescribeStreamConsumer -> Bool
$c== :: DescribeStreamConsumer -> DescribeStreamConsumer -> Bool
Prelude.Eq, ReadPrec [DescribeStreamConsumer]
ReadPrec DescribeStreamConsumer
Int -> ReadS DescribeStreamConsumer
ReadS [DescribeStreamConsumer]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeStreamConsumer]
$creadListPrec :: ReadPrec [DescribeStreamConsumer]
readPrec :: ReadPrec DescribeStreamConsumer
$creadPrec :: ReadPrec DescribeStreamConsumer
readList :: ReadS [DescribeStreamConsumer]
$creadList :: ReadS [DescribeStreamConsumer]
readsPrec :: Int -> ReadS DescribeStreamConsumer
$creadsPrec :: Int -> ReadS DescribeStreamConsumer
Prelude.Read, Int -> DescribeStreamConsumer -> ShowS
[DescribeStreamConsumer] -> ShowS
DescribeStreamConsumer -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeStreamConsumer] -> ShowS
$cshowList :: [DescribeStreamConsumer] -> ShowS
show :: DescribeStreamConsumer -> String
$cshow :: DescribeStreamConsumer -> String
showsPrec :: Int -> DescribeStreamConsumer -> ShowS
$cshowsPrec :: Int -> DescribeStreamConsumer -> ShowS
Prelude.Show, forall x. Rep DescribeStreamConsumer x -> DescribeStreamConsumer
forall x. DescribeStreamConsumer -> Rep DescribeStreamConsumer x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeStreamConsumer x -> DescribeStreamConsumer
$cfrom :: forall x. DescribeStreamConsumer -> Rep DescribeStreamConsumer x
Prelude.Generic)

-- |
-- Create a value of 'DescribeStreamConsumer' 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:
--
-- 'consumerARN', 'describeStreamConsumer_consumerARN' - The ARN returned by Kinesis Data Streams when you registered the
-- consumer.
--
-- 'consumerName', 'describeStreamConsumer_consumerName' - The name that you gave to the consumer.
--
-- 'streamARN', 'describeStreamConsumer_streamARN' - The ARN of the Kinesis data stream that the consumer is registered with.
-- For more information, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kinesis-streams Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>.
newDescribeStreamConsumer ::
  DescribeStreamConsumer
newDescribeStreamConsumer :: DescribeStreamConsumer
newDescribeStreamConsumer =
  DescribeStreamConsumer'
    { $sel:consumerARN:DescribeStreamConsumer' :: Maybe Text
consumerARN =
        forall a. Maybe a
Prelude.Nothing,
      $sel:consumerName:DescribeStreamConsumer' :: Maybe Text
consumerName = forall a. Maybe a
Prelude.Nothing,
      $sel:streamARN:DescribeStreamConsumer' :: Maybe Text
streamARN = forall a. Maybe a
Prelude.Nothing
    }

-- | The ARN returned by Kinesis Data Streams when you registered the
-- consumer.
describeStreamConsumer_consumerARN :: Lens.Lens' DescribeStreamConsumer (Prelude.Maybe Prelude.Text)
describeStreamConsumer_consumerARN :: Lens' DescribeStreamConsumer (Maybe Text)
describeStreamConsumer_consumerARN = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeStreamConsumer' {Maybe Text
consumerARN :: Maybe Text
$sel:consumerARN:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
consumerARN} -> Maybe Text
consumerARN) (\s :: DescribeStreamConsumer
s@DescribeStreamConsumer' {} Maybe Text
a -> DescribeStreamConsumer
s {$sel:consumerARN:DescribeStreamConsumer' :: Maybe Text
consumerARN = Maybe Text
a} :: DescribeStreamConsumer)

-- | The name that you gave to the consumer.
describeStreamConsumer_consumerName :: Lens.Lens' DescribeStreamConsumer (Prelude.Maybe Prelude.Text)
describeStreamConsumer_consumerName :: Lens' DescribeStreamConsumer (Maybe Text)
describeStreamConsumer_consumerName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeStreamConsumer' {Maybe Text
consumerName :: Maybe Text
$sel:consumerName:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
consumerName} -> Maybe Text
consumerName) (\s :: DescribeStreamConsumer
s@DescribeStreamConsumer' {} Maybe Text
a -> DescribeStreamConsumer
s {$sel:consumerName:DescribeStreamConsumer' :: Maybe Text
consumerName = Maybe Text
a} :: DescribeStreamConsumer)

-- | The ARN of the Kinesis data stream that the consumer is registered with.
-- For more information, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-kinesis-streams Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces>.
describeStreamConsumer_streamARN :: Lens.Lens' DescribeStreamConsumer (Prelude.Maybe Prelude.Text)
describeStreamConsumer_streamARN :: Lens' DescribeStreamConsumer (Maybe Text)
describeStreamConsumer_streamARN = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeStreamConsumer' {Maybe Text
streamARN :: Maybe Text
$sel:streamARN:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
streamARN} -> Maybe Text
streamARN) (\s :: DescribeStreamConsumer
s@DescribeStreamConsumer' {} Maybe Text
a -> DescribeStreamConsumer
s {$sel:streamARN:DescribeStreamConsumer' :: Maybe Text
streamARN = Maybe Text
a} :: DescribeStreamConsumer)

instance Core.AWSRequest DescribeStreamConsumer where
  type
    AWSResponse DescribeStreamConsumer =
      DescribeStreamConsumerResponse
  request :: (Service -> Service)
-> DescribeStreamConsumer -> Request DescribeStreamConsumer
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeStreamConsumer
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeStreamConsumer)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Int -> ConsumerDescription -> DescribeStreamConsumerResponse
DescribeStreamConsumerResponse'
            forall (f :: * -> *) a b. Functor 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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"ConsumerDescription")
      )

instance Prelude.Hashable DescribeStreamConsumer where
  hashWithSalt :: Int -> DescribeStreamConsumer -> Int
hashWithSalt Int
_salt DescribeStreamConsumer' {Maybe Text
streamARN :: Maybe Text
consumerName :: Maybe Text
consumerARN :: Maybe Text
$sel:streamARN:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
$sel:consumerName:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
$sel:consumerARN:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
consumerARN
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
consumerName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
streamARN

instance Prelude.NFData DescribeStreamConsumer where
  rnf :: DescribeStreamConsumer -> ()
rnf DescribeStreamConsumer' {Maybe Text
streamARN :: Maybe Text
consumerName :: Maybe Text
consumerARN :: Maybe Text
$sel:streamARN:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
$sel:consumerName:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
$sel:consumerARN:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
consumerARN
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
consumerName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
streamARN

instance Data.ToHeaders DescribeStreamConsumer where
  toHeaders :: DescribeStreamConsumer -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"Kinesis_20131202.DescribeStreamConsumer" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON DescribeStreamConsumer where
  toJSON :: DescribeStreamConsumer -> Value
toJSON DescribeStreamConsumer' {Maybe Text
streamARN :: Maybe Text
consumerName :: Maybe Text
consumerARN :: Maybe Text
$sel:streamARN:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
$sel:consumerName:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
$sel:consumerARN:DescribeStreamConsumer' :: DescribeStreamConsumer -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ConsumerARN" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
consumerARN,
            (Key
"ConsumerName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
consumerName,
            (Key
"StreamARN" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
streamARN
          ]
      )

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

instance Data.ToQuery DescribeStreamConsumer where
  toQuery :: DescribeStreamConsumer -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newDescribeStreamConsumerResponse' smart constructor.
data DescribeStreamConsumerResponse = DescribeStreamConsumerResponse'
  { -- | The response's http status code.
    DescribeStreamConsumerResponse -> Int
httpStatus :: Prelude.Int,
    -- | An object that represents the details of the consumer.
    DescribeStreamConsumerResponse -> ConsumerDescription
consumerDescription :: ConsumerDescription
  }
  deriving (DescribeStreamConsumerResponse
-> DescribeStreamConsumerResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeStreamConsumerResponse
-> DescribeStreamConsumerResponse -> Bool
$c/= :: DescribeStreamConsumerResponse
-> DescribeStreamConsumerResponse -> Bool
== :: DescribeStreamConsumerResponse
-> DescribeStreamConsumerResponse -> Bool
$c== :: DescribeStreamConsumerResponse
-> DescribeStreamConsumerResponse -> Bool
Prelude.Eq, ReadPrec [DescribeStreamConsumerResponse]
ReadPrec DescribeStreamConsumerResponse
Int -> ReadS DescribeStreamConsumerResponse
ReadS [DescribeStreamConsumerResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeStreamConsumerResponse]
$creadListPrec :: ReadPrec [DescribeStreamConsumerResponse]
readPrec :: ReadPrec DescribeStreamConsumerResponse
$creadPrec :: ReadPrec DescribeStreamConsumerResponse
readList :: ReadS [DescribeStreamConsumerResponse]
$creadList :: ReadS [DescribeStreamConsumerResponse]
readsPrec :: Int -> ReadS DescribeStreamConsumerResponse
$creadsPrec :: Int -> ReadS DescribeStreamConsumerResponse
Prelude.Read, Int -> DescribeStreamConsumerResponse -> ShowS
[DescribeStreamConsumerResponse] -> ShowS
DescribeStreamConsumerResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeStreamConsumerResponse] -> ShowS
$cshowList :: [DescribeStreamConsumerResponse] -> ShowS
show :: DescribeStreamConsumerResponse -> String
$cshow :: DescribeStreamConsumerResponse -> String
showsPrec :: Int -> DescribeStreamConsumerResponse -> ShowS
$cshowsPrec :: Int -> DescribeStreamConsumerResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeStreamConsumerResponse x
-> DescribeStreamConsumerResponse
forall x.
DescribeStreamConsumerResponse
-> Rep DescribeStreamConsumerResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeStreamConsumerResponse x
-> DescribeStreamConsumerResponse
$cfrom :: forall x.
DescribeStreamConsumerResponse
-> Rep DescribeStreamConsumerResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeStreamConsumerResponse' 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:
--
-- 'httpStatus', 'describeStreamConsumerResponse_httpStatus' - The response's http status code.
--
-- 'consumerDescription', 'describeStreamConsumerResponse_consumerDescription' - An object that represents the details of the consumer.
newDescribeStreamConsumerResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'consumerDescription'
  ConsumerDescription ->
  DescribeStreamConsumerResponse
newDescribeStreamConsumerResponse :: Int -> ConsumerDescription -> DescribeStreamConsumerResponse
newDescribeStreamConsumerResponse
  Int
pHttpStatus_
  ConsumerDescription
pConsumerDescription_ =
    DescribeStreamConsumerResponse'
      { $sel:httpStatus:DescribeStreamConsumerResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:consumerDescription:DescribeStreamConsumerResponse' :: ConsumerDescription
consumerDescription = ConsumerDescription
pConsumerDescription_
      }

-- | The response's http status code.
describeStreamConsumerResponse_httpStatus :: Lens.Lens' DescribeStreamConsumerResponse Prelude.Int
describeStreamConsumerResponse_httpStatus :: Lens' DescribeStreamConsumerResponse Int
describeStreamConsumerResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeStreamConsumerResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribeStreamConsumerResponse' :: DescribeStreamConsumerResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribeStreamConsumerResponse
s@DescribeStreamConsumerResponse' {} Int
a -> DescribeStreamConsumerResponse
s {$sel:httpStatus:DescribeStreamConsumerResponse' :: Int
httpStatus = Int
a} :: DescribeStreamConsumerResponse)

-- | An object that represents the details of the consumer.
describeStreamConsumerResponse_consumerDescription :: Lens.Lens' DescribeStreamConsumerResponse ConsumerDescription
describeStreamConsumerResponse_consumerDescription :: Lens' DescribeStreamConsumerResponse ConsumerDescription
describeStreamConsumerResponse_consumerDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeStreamConsumerResponse' {ConsumerDescription
consumerDescription :: ConsumerDescription
$sel:consumerDescription:DescribeStreamConsumerResponse' :: DescribeStreamConsumerResponse -> ConsumerDescription
consumerDescription} -> ConsumerDescription
consumerDescription) (\s :: DescribeStreamConsumerResponse
s@DescribeStreamConsumerResponse' {} ConsumerDescription
a -> DescribeStreamConsumerResponse
s {$sel:consumerDescription:DescribeStreamConsumerResponse' :: ConsumerDescription
consumerDescription = ConsumerDescription
a} :: DescribeStreamConsumerResponse)

instance
  Prelude.NFData
    DescribeStreamConsumerResponse
  where
  rnf :: DescribeStreamConsumerResponse -> ()
rnf DescribeStreamConsumerResponse' {Int
ConsumerDescription
consumerDescription :: ConsumerDescription
httpStatus :: Int
$sel:consumerDescription:DescribeStreamConsumerResponse' :: DescribeStreamConsumerResponse -> ConsumerDescription
$sel:httpStatus:DescribeStreamConsumerResponse' :: DescribeStreamConsumerResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ConsumerDescription
consumerDescription