{-# 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.KinesisAnalyticsV2.DescribeApplication
-- 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 information about a specific Kinesis Data Analytics application.
--
-- If you want to retrieve a list of all applications in your account, use
-- the ListApplications operation.
module Amazonka.KinesisAnalyticsV2.DescribeApplication
  ( -- * Creating a Request
    DescribeApplication (..),
    newDescribeApplication,

    -- * Request Lenses
    describeApplication_includeAdditionalDetails,
    describeApplication_applicationName,

    -- * Destructuring the Response
    DescribeApplicationResponse (..),
    newDescribeApplicationResponse,

    -- * Response Lenses
    describeApplicationResponse_httpStatus,
    describeApplicationResponse_applicationDetail,
  )
where

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

-- | /See:/ 'newDescribeApplication' smart constructor.
data DescribeApplication = DescribeApplication'
  { -- | Displays verbose information about a Kinesis Data Analytics application,
    -- including the application\'s job plan.
    DescribeApplication -> Maybe Bool
includeAdditionalDetails :: Prelude.Maybe Prelude.Bool,
    -- | The name of the application.
    DescribeApplication -> Text
applicationName :: Prelude.Text
  }
  deriving (DescribeApplication -> DescribeApplication -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeApplication -> DescribeApplication -> Bool
$c/= :: DescribeApplication -> DescribeApplication -> Bool
== :: DescribeApplication -> DescribeApplication -> Bool
$c== :: DescribeApplication -> DescribeApplication -> Bool
Prelude.Eq, ReadPrec [DescribeApplication]
ReadPrec DescribeApplication
Int -> ReadS DescribeApplication
ReadS [DescribeApplication]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeApplication]
$creadListPrec :: ReadPrec [DescribeApplication]
readPrec :: ReadPrec DescribeApplication
$creadPrec :: ReadPrec DescribeApplication
readList :: ReadS [DescribeApplication]
$creadList :: ReadS [DescribeApplication]
readsPrec :: Int -> ReadS DescribeApplication
$creadsPrec :: Int -> ReadS DescribeApplication
Prelude.Read, Int -> DescribeApplication -> ShowS
[DescribeApplication] -> ShowS
DescribeApplication -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeApplication] -> ShowS
$cshowList :: [DescribeApplication] -> ShowS
show :: DescribeApplication -> String
$cshow :: DescribeApplication -> String
showsPrec :: Int -> DescribeApplication -> ShowS
$cshowsPrec :: Int -> DescribeApplication -> ShowS
Prelude.Show, forall x. Rep DescribeApplication x -> DescribeApplication
forall x. DescribeApplication -> Rep DescribeApplication x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeApplication x -> DescribeApplication
$cfrom :: forall x. DescribeApplication -> Rep DescribeApplication x
Prelude.Generic)

-- |
-- Create a value of 'DescribeApplication' 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:
--
-- 'includeAdditionalDetails', 'describeApplication_includeAdditionalDetails' - Displays verbose information about a Kinesis Data Analytics application,
-- including the application\'s job plan.
--
-- 'applicationName', 'describeApplication_applicationName' - The name of the application.
newDescribeApplication ::
  -- | 'applicationName'
  Prelude.Text ->
  DescribeApplication
newDescribeApplication :: Text -> DescribeApplication
newDescribeApplication Text
pApplicationName_ =
  DescribeApplication'
    { $sel:includeAdditionalDetails:DescribeApplication' :: Maybe Bool
includeAdditionalDetails =
        forall a. Maybe a
Prelude.Nothing,
      $sel:applicationName:DescribeApplication' :: Text
applicationName = Text
pApplicationName_
    }

-- | Displays verbose information about a Kinesis Data Analytics application,
-- including the application\'s job plan.
describeApplication_includeAdditionalDetails :: Lens.Lens' DescribeApplication (Prelude.Maybe Prelude.Bool)
describeApplication_includeAdditionalDetails :: Lens' DescribeApplication (Maybe Bool)
describeApplication_includeAdditionalDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeApplication' {Maybe Bool
includeAdditionalDetails :: Maybe Bool
$sel:includeAdditionalDetails:DescribeApplication' :: DescribeApplication -> Maybe Bool
includeAdditionalDetails} -> Maybe Bool
includeAdditionalDetails) (\s :: DescribeApplication
s@DescribeApplication' {} Maybe Bool
a -> DescribeApplication
s {$sel:includeAdditionalDetails:DescribeApplication' :: Maybe Bool
includeAdditionalDetails = Maybe Bool
a} :: DescribeApplication)

-- | The name of the application.
describeApplication_applicationName :: Lens.Lens' DescribeApplication Prelude.Text
describeApplication_applicationName :: Lens' DescribeApplication Text
describeApplication_applicationName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeApplication' {Text
applicationName :: Text
$sel:applicationName:DescribeApplication' :: DescribeApplication -> Text
applicationName} -> Text
applicationName) (\s :: DescribeApplication
s@DescribeApplication' {} Text
a -> DescribeApplication
s {$sel:applicationName:DescribeApplication' :: Text
applicationName = Text
a} :: DescribeApplication)

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

instance Prelude.Hashable DescribeApplication where
  hashWithSalt :: Int -> DescribeApplication -> Int
hashWithSalt Int
_salt DescribeApplication' {Maybe Bool
Text
applicationName :: Text
includeAdditionalDetails :: Maybe Bool
$sel:applicationName:DescribeApplication' :: DescribeApplication -> Text
$sel:includeAdditionalDetails:DescribeApplication' :: DescribeApplication -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
includeAdditionalDetails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
applicationName

instance Prelude.NFData DescribeApplication where
  rnf :: DescribeApplication -> ()
rnf DescribeApplication' {Maybe Bool
Text
applicationName :: Text
includeAdditionalDetails :: Maybe Bool
$sel:applicationName:DescribeApplication' :: DescribeApplication -> Text
$sel:includeAdditionalDetails:DescribeApplication' :: DescribeApplication -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
includeAdditionalDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
applicationName

instance Data.ToHeaders DescribeApplication where
  toHeaders :: DescribeApplication -> 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
"KinesisAnalytics_20180523.DescribeApplication" ::
                          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 DescribeApplication where
  toJSON :: DescribeApplication -> Value
toJSON DescribeApplication' {Maybe Bool
Text
applicationName :: Text
includeAdditionalDetails :: Maybe Bool
$sel:applicationName:DescribeApplication' :: DescribeApplication -> Text
$sel:includeAdditionalDetails:DescribeApplication' :: DescribeApplication -> Maybe Bool
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"IncludeAdditionalDetails" 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 Bool
includeAdditionalDetails,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"ApplicationName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
applicationName)
          ]
      )

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

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

-- | /See:/ 'newDescribeApplicationResponse' smart constructor.
data DescribeApplicationResponse = DescribeApplicationResponse'
  { -- | The response's http status code.
    DescribeApplicationResponse -> Int
httpStatus :: Prelude.Int,
    -- | Provides a description of the application, such as the application\'s
    -- Amazon Resource Name (ARN), status, and latest version.
    DescribeApplicationResponse -> ApplicationDetail
applicationDetail :: ApplicationDetail
  }
  deriving (DescribeApplicationResponse -> DescribeApplicationResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeApplicationResponse -> DescribeApplicationResponse -> Bool
$c/= :: DescribeApplicationResponse -> DescribeApplicationResponse -> Bool
== :: DescribeApplicationResponse -> DescribeApplicationResponse -> Bool
$c== :: DescribeApplicationResponse -> DescribeApplicationResponse -> Bool
Prelude.Eq, ReadPrec [DescribeApplicationResponse]
ReadPrec DescribeApplicationResponse
Int -> ReadS DescribeApplicationResponse
ReadS [DescribeApplicationResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeApplicationResponse]
$creadListPrec :: ReadPrec [DescribeApplicationResponse]
readPrec :: ReadPrec DescribeApplicationResponse
$creadPrec :: ReadPrec DescribeApplicationResponse
readList :: ReadS [DescribeApplicationResponse]
$creadList :: ReadS [DescribeApplicationResponse]
readsPrec :: Int -> ReadS DescribeApplicationResponse
$creadsPrec :: Int -> ReadS DescribeApplicationResponse
Prelude.Read, Int -> DescribeApplicationResponse -> ShowS
[DescribeApplicationResponse] -> ShowS
DescribeApplicationResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeApplicationResponse] -> ShowS
$cshowList :: [DescribeApplicationResponse] -> ShowS
show :: DescribeApplicationResponse -> String
$cshow :: DescribeApplicationResponse -> String
showsPrec :: Int -> DescribeApplicationResponse -> ShowS
$cshowsPrec :: Int -> DescribeApplicationResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeApplicationResponse x -> DescribeApplicationResponse
forall x.
DescribeApplicationResponse -> Rep DescribeApplicationResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeApplicationResponse x -> DescribeApplicationResponse
$cfrom :: forall x.
DescribeApplicationResponse -> Rep DescribeApplicationResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeApplicationResponse' 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', 'describeApplicationResponse_httpStatus' - The response's http status code.
--
-- 'applicationDetail', 'describeApplicationResponse_applicationDetail' - Provides a description of the application, such as the application\'s
-- Amazon Resource Name (ARN), status, and latest version.
newDescribeApplicationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'applicationDetail'
  ApplicationDetail ->
  DescribeApplicationResponse
newDescribeApplicationResponse :: Int -> ApplicationDetail -> DescribeApplicationResponse
newDescribeApplicationResponse
  Int
pHttpStatus_
  ApplicationDetail
pApplicationDetail_ =
    DescribeApplicationResponse'
      { $sel:httpStatus:DescribeApplicationResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:applicationDetail:DescribeApplicationResponse' :: ApplicationDetail
applicationDetail = ApplicationDetail
pApplicationDetail_
      }

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

-- | Provides a description of the application, such as the application\'s
-- Amazon Resource Name (ARN), status, and latest version.
describeApplicationResponse_applicationDetail :: Lens.Lens' DescribeApplicationResponse ApplicationDetail
describeApplicationResponse_applicationDetail :: Lens' DescribeApplicationResponse ApplicationDetail
describeApplicationResponse_applicationDetail = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeApplicationResponse' {ApplicationDetail
applicationDetail :: ApplicationDetail
$sel:applicationDetail:DescribeApplicationResponse' :: DescribeApplicationResponse -> ApplicationDetail
applicationDetail} -> ApplicationDetail
applicationDetail) (\s :: DescribeApplicationResponse
s@DescribeApplicationResponse' {} ApplicationDetail
a -> DescribeApplicationResponse
s {$sel:applicationDetail:DescribeApplicationResponse' :: ApplicationDetail
applicationDetail = ApplicationDetail
a} :: DescribeApplicationResponse)

instance Prelude.NFData DescribeApplicationResponse where
  rnf :: DescribeApplicationResponse -> ()
rnf DescribeApplicationResponse' {Int
ApplicationDetail
applicationDetail :: ApplicationDetail
httpStatus :: Int
$sel:applicationDetail:DescribeApplicationResponse' :: DescribeApplicationResponse -> ApplicationDetail
$sel:httpStatus:DescribeApplicationResponse' :: DescribeApplicationResponse -> 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 ApplicationDetail
applicationDetail