{-# 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.Firehose.DescribeDeliveryStream
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Describes the specified delivery stream and its status. For example,
-- after your delivery stream is created, call @DescribeDeliveryStream@ to
-- see whether the delivery stream is @ACTIVE@ and therefore ready for data
-- to be sent to it.
--
-- If the status of a delivery stream is @CREATING_FAILED@, this status
-- doesn\'t change, and you can\'t invoke CreateDeliveryStream again on it.
-- However, you can invoke the DeleteDeliveryStream operation to delete it.
-- If the status is @DELETING_FAILED@, you can force deletion by invoking
-- DeleteDeliveryStream again but with
-- DeleteDeliveryStreamInput$AllowForceDelete set to true.
module Amazonka.Firehose.DescribeDeliveryStream
  ( -- * Creating a Request
    DescribeDeliveryStream (..),
    newDescribeDeliveryStream,

    -- * Request Lenses
    describeDeliveryStream_exclusiveStartDestinationId,
    describeDeliveryStream_limit,
    describeDeliveryStream_deliveryStreamName,

    -- * Destructuring the Response
    DescribeDeliveryStreamResponse (..),
    newDescribeDeliveryStreamResponse,

    -- * Response Lenses
    describeDeliveryStreamResponse_httpStatus,
    describeDeliveryStreamResponse_deliveryStreamDescription,
  )
where

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

-- | /See:/ 'newDescribeDeliveryStream' smart constructor.
data DescribeDeliveryStream = DescribeDeliveryStream'
  { -- | The ID of the destination to start returning the destination
    -- information. Kinesis Data Firehose supports one destination per delivery
    -- stream.
    DescribeDeliveryStream -> Maybe Text
exclusiveStartDestinationId :: Prelude.Maybe Prelude.Text,
    -- | The limit on the number of destinations to return. You can have one
    -- destination per delivery stream.
    DescribeDeliveryStream -> Maybe Natural
limit :: Prelude.Maybe Prelude.Natural,
    -- | The name of the delivery stream.
    DescribeDeliveryStream -> Text
deliveryStreamName :: Prelude.Text
  }
  deriving (DescribeDeliveryStream -> DescribeDeliveryStream -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeDeliveryStream -> DescribeDeliveryStream -> Bool
$c/= :: DescribeDeliveryStream -> DescribeDeliveryStream -> Bool
== :: DescribeDeliveryStream -> DescribeDeliveryStream -> Bool
$c== :: DescribeDeliveryStream -> DescribeDeliveryStream -> Bool
Prelude.Eq, ReadPrec [DescribeDeliveryStream]
ReadPrec DescribeDeliveryStream
Int -> ReadS DescribeDeliveryStream
ReadS [DescribeDeliveryStream]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeDeliveryStream]
$creadListPrec :: ReadPrec [DescribeDeliveryStream]
readPrec :: ReadPrec DescribeDeliveryStream
$creadPrec :: ReadPrec DescribeDeliveryStream
readList :: ReadS [DescribeDeliveryStream]
$creadList :: ReadS [DescribeDeliveryStream]
readsPrec :: Int -> ReadS DescribeDeliveryStream
$creadsPrec :: Int -> ReadS DescribeDeliveryStream
Prelude.Read, Int -> DescribeDeliveryStream -> ShowS
[DescribeDeliveryStream] -> ShowS
DescribeDeliveryStream -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeDeliveryStream] -> ShowS
$cshowList :: [DescribeDeliveryStream] -> ShowS
show :: DescribeDeliveryStream -> String
$cshow :: DescribeDeliveryStream -> String
showsPrec :: Int -> DescribeDeliveryStream -> ShowS
$cshowsPrec :: Int -> DescribeDeliveryStream -> ShowS
Prelude.Show, forall x. Rep DescribeDeliveryStream x -> DescribeDeliveryStream
forall x. DescribeDeliveryStream -> Rep DescribeDeliveryStream x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeDeliveryStream x -> DescribeDeliveryStream
$cfrom :: forall x. DescribeDeliveryStream -> Rep DescribeDeliveryStream x
Prelude.Generic)

-- |
-- Create a value of 'DescribeDeliveryStream' 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:
--
-- 'exclusiveStartDestinationId', 'describeDeliveryStream_exclusiveStartDestinationId' - The ID of the destination to start returning the destination
-- information. Kinesis Data Firehose supports one destination per delivery
-- stream.
--
-- 'limit', 'describeDeliveryStream_limit' - The limit on the number of destinations to return. You can have one
-- destination per delivery stream.
--
-- 'deliveryStreamName', 'describeDeliveryStream_deliveryStreamName' - The name of the delivery stream.
newDescribeDeliveryStream ::
  -- | 'deliveryStreamName'
  Prelude.Text ->
  DescribeDeliveryStream
newDescribeDeliveryStream :: Text -> DescribeDeliveryStream
newDescribeDeliveryStream Text
pDeliveryStreamName_ =
  DescribeDeliveryStream'
    { $sel:exclusiveStartDestinationId:DescribeDeliveryStream' :: Maybe Text
exclusiveStartDestinationId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:limit:DescribeDeliveryStream' :: Maybe Natural
limit = forall a. Maybe a
Prelude.Nothing,
      $sel:deliveryStreamName:DescribeDeliveryStream' :: Text
deliveryStreamName = Text
pDeliveryStreamName_
    }

-- | The ID of the destination to start returning the destination
-- information. Kinesis Data Firehose supports one destination per delivery
-- stream.
describeDeliveryStream_exclusiveStartDestinationId :: Lens.Lens' DescribeDeliveryStream (Prelude.Maybe Prelude.Text)
describeDeliveryStream_exclusiveStartDestinationId :: Lens' DescribeDeliveryStream (Maybe Text)
describeDeliveryStream_exclusiveStartDestinationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeDeliveryStream' {Maybe Text
exclusiveStartDestinationId :: Maybe Text
$sel:exclusiveStartDestinationId:DescribeDeliveryStream' :: DescribeDeliveryStream -> Maybe Text
exclusiveStartDestinationId} -> Maybe Text
exclusiveStartDestinationId) (\s :: DescribeDeliveryStream
s@DescribeDeliveryStream' {} Maybe Text
a -> DescribeDeliveryStream
s {$sel:exclusiveStartDestinationId:DescribeDeliveryStream' :: Maybe Text
exclusiveStartDestinationId = Maybe Text
a} :: DescribeDeliveryStream)

-- | The limit on the number of destinations to return. You can have one
-- destination per delivery stream.
describeDeliveryStream_limit :: Lens.Lens' DescribeDeliveryStream (Prelude.Maybe Prelude.Natural)
describeDeliveryStream_limit :: Lens' DescribeDeliveryStream (Maybe Natural)
describeDeliveryStream_limit = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeDeliveryStream' {Maybe Natural
limit :: Maybe Natural
$sel:limit:DescribeDeliveryStream' :: DescribeDeliveryStream -> Maybe Natural
limit} -> Maybe Natural
limit) (\s :: DescribeDeliveryStream
s@DescribeDeliveryStream' {} Maybe Natural
a -> DescribeDeliveryStream
s {$sel:limit:DescribeDeliveryStream' :: Maybe Natural
limit = Maybe Natural
a} :: DescribeDeliveryStream)

-- | The name of the delivery stream.
describeDeliveryStream_deliveryStreamName :: Lens.Lens' DescribeDeliveryStream Prelude.Text
describeDeliveryStream_deliveryStreamName :: Lens' DescribeDeliveryStream Text
describeDeliveryStream_deliveryStreamName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeDeliveryStream' {Text
deliveryStreamName :: Text
$sel:deliveryStreamName:DescribeDeliveryStream' :: DescribeDeliveryStream -> Text
deliveryStreamName} -> Text
deliveryStreamName) (\s :: DescribeDeliveryStream
s@DescribeDeliveryStream' {} Text
a -> DescribeDeliveryStream
s {$sel:deliveryStreamName:DescribeDeliveryStream' :: Text
deliveryStreamName = Text
a} :: DescribeDeliveryStream)

instance Core.AWSRequest DescribeDeliveryStream where
  type
    AWSResponse DescribeDeliveryStream =
      DescribeDeliveryStreamResponse
  request :: (Service -> Service)
-> DescribeDeliveryStream -> Request DescribeDeliveryStream
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 DescribeDeliveryStream
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeDeliveryStream)))
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 -> DeliveryStreamDescription -> DescribeDeliveryStreamResponse
DescribeDeliveryStreamResponse'
            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
"DeliveryStreamDescription")
      )

instance Prelude.Hashable DescribeDeliveryStream where
  hashWithSalt :: Int -> DescribeDeliveryStream -> Int
hashWithSalt Int
_salt DescribeDeliveryStream' {Maybe Natural
Maybe Text
Text
deliveryStreamName :: Text
limit :: Maybe Natural
exclusiveStartDestinationId :: Maybe Text
$sel:deliveryStreamName:DescribeDeliveryStream' :: DescribeDeliveryStream -> Text
$sel:limit:DescribeDeliveryStream' :: DescribeDeliveryStream -> Maybe Natural
$sel:exclusiveStartDestinationId:DescribeDeliveryStream' :: DescribeDeliveryStream -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
exclusiveStartDestinationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
limit
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
deliveryStreamName

instance Prelude.NFData DescribeDeliveryStream where
  rnf :: DescribeDeliveryStream -> ()
rnf DescribeDeliveryStream' {Maybe Natural
Maybe Text
Text
deliveryStreamName :: Text
limit :: Maybe Natural
exclusiveStartDestinationId :: Maybe Text
$sel:deliveryStreamName:DescribeDeliveryStream' :: DescribeDeliveryStream -> Text
$sel:limit:DescribeDeliveryStream' :: DescribeDeliveryStream -> Maybe Natural
$sel:exclusiveStartDestinationId:DescribeDeliveryStream' :: DescribeDeliveryStream -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
exclusiveStartDestinationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
limit
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
deliveryStreamName

instance Data.ToHeaders DescribeDeliveryStream where
  toHeaders :: DescribeDeliveryStream -> 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
"Firehose_20150804.DescribeDeliveryStream" ::
                          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 DescribeDeliveryStream where
  toJSON :: DescribeDeliveryStream -> Value
toJSON DescribeDeliveryStream' {Maybe Natural
Maybe Text
Text
deliveryStreamName :: Text
limit :: Maybe Natural
exclusiveStartDestinationId :: Maybe Text
$sel:deliveryStreamName:DescribeDeliveryStream' :: DescribeDeliveryStream -> Text
$sel:limit:DescribeDeliveryStream' :: DescribeDeliveryStream -> Maybe Natural
$sel:exclusiveStartDestinationId:DescribeDeliveryStream' :: DescribeDeliveryStream -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ExclusiveStartDestinationId" 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
exclusiveStartDestinationId,
            (Key
"Limit" 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 Natural
limit,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"DeliveryStreamName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
deliveryStreamName)
          ]
      )

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

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

-- | /See:/ 'newDescribeDeliveryStreamResponse' smart constructor.
data DescribeDeliveryStreamResponse = DescribeDeliveryStreamResponse'
  { -- | The response's http status code.
    DescribeDeliveryStreamResponse -> Int
httpStatus :: Prelude.Int,
    -- | Information about the delivery stream.
    DescribeDeliveryStreamResponse -> DeliveryStreamDescription
deliveryStreamDescription :: DeliveryStreamDescription
  }
  deriving (DescribeDeliveryStreamResponse
-> DescribeDeliveryStreamResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeDeliveryStreamResponse
-> DescribeDeliveryStreamResponse -> Bool
$c/= :: DescribeDeliveryStreamResponse
-> DescribeDeliveryStreamResponse -> Bool
== :: DescribeDeliveryStreamResponse
-> DescribeDeliveryStreamResponse -> Bool
$c== :: DescribeDeliveryStreamResponse
-> DescribeDeliveryStreamResponse -> Bool
Prelude.Eq, Int -> DescribeDeliveryStreamResponse -> ShowS
[DescribeDeliveryStreamResponse] -> ShowS
DescribeDeliveryStreamResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeDeliveryStreamResponse] -> ShowS
$cshowList :: [DescribeDeliveryStreamResponse] -> ShowS
show :: DescribeDeliveryStreamResponse -> String
$cshow :: DescribeDeliveryStreamResponse -> String
showsPrec :: Int -> DescribeDeliveryStreamResponse -> ShowS
$cshowsPrec :: Int -> DescribeDeliveryStreamResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeDeliveryStreamResponse x
-> DescribeDeliveryStreamResponse
forall x.
DescribeDeliveryStreamResponse
-> Rep DescribeDeliveryStreamResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeDeliveryStreamResponse x
-> DescribeDeliveryStreamResponse
$cfrom :: forall x.
DescribeDeliveryStreamResponse
-> Rep DescribeDeliveryStreamResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeDeliveryStreamResponse' 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', 'describeDeliveryStreamResponse_httpStatus' - The response's http status code.
--
-- 'deliveryStreamDescription', 'describeDeliveryStreamResponse_deliveryStreamDescription' - Information about the delivery stream.
newDescribeDeliveryStreamResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'deliveryStreamDescription'
  DeliveryStreamDescription ->
  DescribeDeliveryStreamResponse
newDescribeDeliveryStreamResponse :: Int -> DeliveryStreamDescription -> DescribeDeliveryStreamResponse
newDescribeDeliveryStreamResponse
  Int
pHttpStatus_
  DeliveryStreamDescription
pDeliveryStreamDescription_ =
    DescribeDeliveryStreamResponse'
      { $sel:httpStatus:DescribeDeliveryStreamResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:deliveryStreamDescription:DescribeDeliveryStreamResponse' :: DeliveryStreamDescription
deliveryStreamDescription =
          DeliveryStreamDescription
pDeliveryStreamDescription_
      }

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

-- | Information about the delivery stream.
describeDeliveryStreamResponse_deliveryStreamDescription :: Lens.Lens' DescribeDeliveryStreamResponse DeliveryStreamDescription
describeDeliveryStreamResponse_deliveryStreamDescription :: Lens' DescribeDeliveryStreamResponse DeliveryStreamDescription
describeDeliveryStreamResponse_deliveryStreamDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeDeliveryStreamResponse' {DeliveryStreamDescription
deliveryStreamDescription :: DeliveryStreamDescription
$sel:deliveryStreamDescription:DescribeDeliveryStreamResponse' :: DescribeDeliveryStreamResponse -> DeliveryStreamDescription
deliveryStreamDescription} -> DeliveryStreamDescription
deliveryStreamDescription) (\s :: DescribeDeliveryStreamResponse
s@DescribeDeliveryStreamResponse' {} DeliveryStreamDescription
a -> DescribeDeliveryStreamResponse
s {$sel:deliveryStreamDescription:DescribeDeliveryStreamResponse' :: DeliveryStreamDescription
deliveryStreamDescription = DeliveryStreamDescription
a} :: DescribeDeliveryStreamResponse)

instance
  Prelude.NFData
    DescribeDeliveryStreamResponse
  where
  rnf :: DescribeDeliveryStreamResponse -> ()
rnf DescribeDeliveryStreamResponse' {Int
DeliveryStreamDescription
deliveryStreamDescription :: DeliveryStreamDescription
httpStatus :: Int
$sel:deliveryStreamDescription:DescribeDeliveryStreamResponse' :: DescribeDeliveryStreamResponse -> DeliveryStreamDescription
$sel:httpStatus:DescribeDeliveryStreamResponse' :: DescribeDeliveryStreamResponse -> 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 DeliveryStreamDescription
deliveryStreamDescription