{-# 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.Comprehend.DescribeDocumentClassifier
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets the properties associated with a document classifier.
module Amazonka.Comprehend.DescribeDocumentClassifier
  ( -- * Creating a Request
    DescribeDocumentClassifier (..),
    newDescribeDocumentClassifier,

    -- * Request Lenses
    describeDocumentClassifier_documentClassifierArn,

    -- * Destructuring the Response
    DescribeDocumentClassifierResponse (..),
    newDescribeDocumentClassifierResponse,

    -- * Response Lenses
    describeDocumentClassifierResponse_documentClassifierProperties,
    describeDocumentClassifierResponse_httpStatus,
  )
where

import Amazonka.Comprehend.Types
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

-- | /See:/ 'newDescribeDocumentClassifier' smart constructor.
data DescribeDocumentClassifier = DescribeDocumentClassifier'
  { -- | The Amazon Resource Name (ARN) that identifies the document classifier.
    -- The operation returns this identifier in its response.
    DescribeDocumentClassifier -> Text
documentClassifierArn :: Prelude.Text
  }
  deriving (DescribeDocumentClassifier -> DescribeDocumentClassifier -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeDocumentClassifier -> DescribeDocumentClassifier -> Bool
$c/= :: DescribeDocumentClassifier -> DescribeDocumentClassifier -> Bool
== :: DescribeDocumentClassifier -> DescribeDocumentClassifier -> Bool
$c== :: DescribeDocumentClassifier -> DescribeDocumentClassifier -> Bool
Prelude.Eq, ReadPrec [DescribeDocumentClassifier]
ReadPrec DescribeDocumentClassifier
Int -> ReadS DescribeDocumentClassifier
ReadS [DescribeDocumentClassifier]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeDocumentClassifier]
$creadListPrec :: ReadPrec [DescribeDocumentClassifier]
readPrec :: ReadPrec DescribeDocumentClassifier
$creadPrec :: ReadPrec DescribeDocumentClassifier
readList :: ReadS [DescribeDocumentClassifier]
$creadList :: ReadS [DescribeDocumentClassifier]
readsPrec :: Int -> ReadS DescribeDocumentClassifier
$creadsPrec :: Int -> ReadS DescribeDocumentClassifier
Prelude.Read, Int -> DescribeDocumentClassifier -> ShowS
[DescribeDocumentClassifier] -> ShowS
DescribeDocumentClassifier -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeDocumentClassifier] -> ShowS
$cshowList :: [DescribeDocumentClassifier] -> ShowS
show :: DescribeDocumentClassifier -> String
$cshow :: DescribeDocumentClassifier -> String
showsPrec :: Int -> DescribeDocumentClassifier -> ShowS
$cshowsPrec :: Int -> DescribeDocumentClassifier -> ShowS
Prelude.Show, forall x.
Rep DescribeDocumentClassifier x -> DescribeDocumentClassifier
forall x.
DescribeDocumentClassifier -> Rep DescribeDocumentClassifier x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeDocumentClassifier x -> DescribeDocumentClassifier
$cfrom :: forall x.
DescribeDocumentClassifier -> Rep DescribeDocumentClassifier x
Prelude.Generic)

-- |
-- Create a value of 'DescribeDocumentClassifier' 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:
--
-- 'documentClassifierArn', 'describeDocumentClassifier_documentClassifierArn' - The Amazon Resource Name (ARN) that identifies the document classifier.
-- The operation returns this identifier in its response.
newDescribeDocumentClassifier ::
  -- | 'documentClassifierArn'
  Prelude.Text ->
  DescribeDocumentClassifier
newDescribeDocumentClassifier :: Text -> DescribeDocumentClassifier
newDescribeDocumentClassifier Text
pDocumentClassifierArn_ =
  DescribeDocumentClassifier'
    { $sel:documentClassifierArn:DescribeDocumentClassifier' :: Text
documentClassifierArn =
        Text
pDocumentClassifierArn_
    }

-- | The Amazon Resource Name (ARN) that identifies the document classifier.
-- The operation returns this identifier in its response.
describeDocumentClassifier_documentClassifierArn :: Lens.Lens' DescribeDocumentClassifier Prelude.Text
describeDocumentClassifier_documentClassifierArn :: Lens' DescribeDocumentClassifier Text
describeDocumentClassifier_documentClassifierArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeDocumentClassifier' {Text
documentClassifierArn :: Text
$sel:documentClassifierArn:DescribeDocumentClassifier' :: DescribeDocumentClassifier -> Text
documentClassifierArn} -> Text
documentClassifierArn) (\s :: DescribeDocumentClassifier
s@DescribeDocumentClassifier' {} Text
a -> DescribeDocumentClassifier
s {$sel:documentClassifierArn:DescribeDocumentClassifier' :: Text
documentClassifierArn = Text
a} :: DescribeDocumentClassifier)

instance Core.AWSRequest DescribeDocumentClassifier where
  type
    AWSResponse DescribeDocumentClassifier =
      DescribeDocumentClassifierResponse
  request :: (Service -> Service)
-> DescribeDocumentClassifier -> Request DescribeDocumentClassifier
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 DescribeDocumentClassifier
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeDocumentClassifier)))
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 ->
          Maybe DocumentClassifierProperties
-> Int -> DescribeDocumentClassifierResponse
DescribeDocumentClassifierResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"DocumentClassifierProperties")
            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 DescribeDocumentClassifier where
  hashWithSalt :: Int -> DescribeDocumentClassifier -> Int
hashWithSalt Int
_salt DescribeDocumentClassifier' {Text
documentClassifierArn :: Text
$sel:documentClassifierArn:DescribeDocumentClassifier' :: DescribeDocumentClassifier -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
documentClassifierArn

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

instance Data.ToHeaders DescribeDocumentClassifier where
  toHeaders :: DescribeDocumentClassifier -> 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
"Comprehend_20171127.DescribeDocumentClassifier" ::
                          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 DescribeDocumentClassifier where
  toJSON :: DescribeDocumentClassifier -> Value
toJSON DescribeDocumentClassifier' {Text
documentClassifierArn :: Text
$sel:documentClassifierArn:DescribeDocumentClassifier' :: DescribeDocumentClassifier -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              ( Key
"DocumentClassifierArn"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
documentClassifierArn
              )
          ]
      )

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

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

-- | /See:/ 'newDescribeDocumentClassifierResponse' smart constructor.
data DescribeDocumentClassifierResponse = DescribeDocumentClassifierResponse'
  { -- | An object that contains the properties associated with a document
    -- classifier.
    DescribeDocumentClassifierResponse
-> Maybe DocumentClassifierProperties
documentClassifierProperties :: Prelude.Maybe DocumentClassifierProperties,
    -- | The response's http status code.
    DescribeDocumentClassifierResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeDocumentClassifierResponse
-> DescribeDocumentClassifierResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeDocumentClassifierResponse
-> DescribeDocumentClassifierResponse -> Bool
$c/= :: DescribeDocumentClassifierResponse
-> DescribeDocumentClassifierResponse -> Bool
== :: DescribeDocumentClassifierResponse
-> DescribeDocumentClassifierResponse -> Bool
$c== :: DescribeDocumentClassifierResponse
-> DescribeDocumentClassifierResponse -> Bool
Prelude.Eq, Int -> DescribeDocumentClassifierResponse -> ShowS
[DescribeDocumentClassifierResponse] -> ShowS
DescribeDocumentClassifierResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeDocumentClassifierResponse] -> ShowS
$cshowList :: [DescribeDocumentClassifierResponse] -> ShowS
show :: DescribeDocumentClassifierResponse -> String
$cshow :: DescribeDocumentClassifierResponse -> String
showsPrec :: Int -> DescribeDocumentClassifierResponse -> ShowS
$cshowsPrec :: Int -> DescribeDocumentClassifierResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeDocumentClassifierResponse x
-> DescribeDocumentClassifierResponse
forall x.
DescribeDocumentClassifierResponse
-> Rep DescribeDocumentClassifierResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeDocumentClassifierResponse x
-> DescribeDocumentClassifierResponse
$cfrom :: forall x.
DescribeDocumentClassifierResponse
-> Rep DescribeDocumentClassifierResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeDocumentClassifierResponse' 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:
--
-- 'documentClassifierProperties', 'describeDocumentClassifierResponse_documentClassifierProperties' - An object that contains the properties associated with a document
-- classifier.
--
-- 'httpStatus', 'describeDocumentClassifierResponse_httpStatus' - The response's http status code.
newDescribeDocumentClassifierResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeDocumentClassifierResponse
newDescribeDocumentClassifierResponse :: Int -> DescribeDocumentClassifierResponse
newDescribeDocumentClassifierResponse Int
pHttpStatus_ =
  DescribeDocumentClassifierResponse'
    { $sel:documentClassifierProperties:DescribeDocumentClassifierResponse' :: Maybe DocumentClassifierProperties
documentClassifierProperties =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeDocumentClassifierResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | An object that contains the properties associated with a document
-- classifier.
describeDocumentClassifierResponse_documentClassifierProperties :: Lens.Lens' DescribeDocumentClassifierResponse (Prelude.Maybe DocumentClassifierProperties)
describeDocumentClassifierResponse_documentClassifierProperties :: Lens'
  DescribeDocumentClassifierResponse
  (Maybe DocumentClassifierProperties)
describeDocumentClassifierResponse_documentClassifierProperties = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeDocumentClassifierResponse' {Maybe DocumentClassifierProperties
documentClassifierProperties :: Maybe DocumentClassifierProperties
$sel:documentClassifierProperties:DescribeDocumentClassifierResponse' :: DescribeDocumentClassifierResponse
-> Maybe DocumentClassifierProperties
documentClassifierProperties} -> Maybe DocumentClassifierProperties
documentClassifierProperties) (\s :: DescribeDocumentClassifierResponse
s@DescribeDocumentClassifierResponse' {} Maybe DocumentClassifierProperties
a -> DescribeDocumentClassifierResponse
s {$sel:documentClassifierProperties:DescribeDocumentClassifierResponse' :: Maybe DocumentClassifierProperties
documentClassifierProperties = Maybe DocumentClassifierProperties
a} :: DescribeDocumentClassifierResponse)

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

instance
  Prelude.NFData
    DescribeDocumentClassifierResponse
  where
  rnf :: DescribeDocumentClassifierResponse -> ()
rnf DescribeDocumentClassifierResponse' {Int
Maybe DocumentClassifierProperties
httpStatus :: Int
documentClassifierProperties :: Maybe DocumentClassifierProperties
$sel:httpStatus:DescribeDocumentClassifierResponse' :: DescribeDocumentClassifierResponse -> Int
$sel:documentClassifierProperties:DescribeDocumentClassifierResponse' :: DescribeDocumentClassifierResponse
-> Maybe DocumentClassifierProperties
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DocumentClassifierProperties
documentClassifierProperties
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus