{-# 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.Personalize.DescribeRecommender
-- 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 given recommender, including its status.
--
-- A recommender can be in one of the following states:
--
-- -   CREATE PENDING > CREATE IN_PROGRESS > ACTIVE -or- CREATE FAILED
--
-- -   STOP PENDING > STOP IN_PROGRESS > INACTIVE > START PENDING > START
--     IN_PROGRESS > ACTIVE
--
-- -   DELETE PENDING > DELETE IN_PROGRESS
--
-- When the @status@ is @CREATE FAILED@, the response includes the
-- @failureReason@ key, which describes why.
--
-- The @modelMetrics@ key is null when the recommender is being created or
-- deleted.
--
-- For more information on recommenders, see
-- <https://docs.aws.amazon.com/personalize/latest/dg/API_CreateRecommender.html CreateRecommender>.
module Amazonka.Personalize.DescribeRecommender
  ( -- * Creating a Request
    DescribeRecommender (..),
    newDescribeRecommender,

    -- * Request Lenses
    describeRecommender_recommenderArn,

    -- * Destructuring the Response
    DescribeRecommenderResponse (..),
    newDescribeRecommenderResponse,

    -- * Response Lenses
    describeRecommenderResponse_recommender,
    describeRecommenderResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDescribeRecommender' smart constructor.
data DescribeRecommender = DescribeRecommender'
  { -- | The Amazon Resource Name (ARN) of the recommender to describe.
    DescribeRecommender -> Text
recommenderArn :: Prelude.Text
  }
  deriving (DescribeRecommender -> DescribeRecommender -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeRecommender -> DescribeRecommender -> Bool
$c/= :: DescribeRecommender -> DescribeRecommender -> Bool
== :: DescribeRecommender -> DescribeRecommender -> Bool
$c== :: DescribeRecommender -> DescribeRecommender -> Bool
Prelude.Eq, ReadPrec [DescribeRecommender]
ReadPrec DescribeRecommender
Int -> ReadS DescribeRecommender
ReadS [DescribeRecommender]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeRecommender]
$creadListPrec :: ReadPrec [DescribeRecommender]
readPrec :: ReadPrec DescribeRecommender
$creadPrec :: ReadPrec DescribeRecommender
readList :: ReadS [DescribeRecommender]
$creadList :: ReadS [DescribeRecommender]
readsPrec :: Int -> ReadS DescribeRecommender
$creadsPrec :: Int -> ReadS DescribeRecommender
Prelude.Read, Int -> DescribeRecommender -> ShowS
[DescribeRecommender] -> ShowS
DescribeRecommender -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeRecommender] -> ShowS
$cshowList :: [DescribeRecommender] -> ShowS
show :: DescribeRecommender -> String
$cshow :: DescribeRecommender -> String
showsPrec :: Int -> DescribeRecommender -> ShowS
$cshowsPrec :: Int -> DescribeRecommender -> ShowS
Prelude.Show, forall x. Rep DescribeRecommender x -> DescribeRecommender
forall x. DescribeRecommender -> Rep DescribeRecommender x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeRecommender x -> DescribeRecommender
$cfrom :: forall x. DescribeRecommender -> Rep DescribeRecommender x
Prelude.Generic)

-- |
-- Create a value of 'DescribeRecommender' 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:
--
-- 'recommenderArn', 'describeRecommender_recommenderArn' - The Amazon Resource Name (ARN) of the recommender to describe.
newDescribeRecommender ::
  -- | 'recommenderArn'
  Prelude.Text ->
  DescribeRecommender
newDescribeRecommender :: Text -> DescribeRecommender
newDescribeRecommender Text
pRecommenderArn_ =
  DescribeRecommender'
    { $sel:recommenderArn:DescribeRecommender' :: Text
recommenderArn =
        Text
pRecommenderArn_
    }

-- | The Amazon Resource Name (ARN) of the recommender to describe.
describeRecommender_recommenderArn :: Lens.Lens' DescribeRecommender Prelude.Text
describeRecommender_recommenderArn :: Lens' DescribeRecommender Text
describeRecommender_recommenderArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeRecommender' {Text
recommenderArn :: Text
$sel:recommenderArn:DescribeRecommender' :: DescribeRecommender -> Text
recommenderArn} -> Text
recommenderArn) (\s :: DescribeRecommender
s@DescribeRecommender' {} Text
a -> DescribeRecommender
s {$sel:recommenderArn:DescribeRecommender' :: Text
recommenderArn = Text
a} :: DescribeRecommender)

instance Core.AWSRequest DescribeRecommender where
  type
    AWSResponse DescribeRecommender =
      DescribeRecommenderResponse
  request :: (Service -> Service)
-> DescribeRecommender -> Request DescribeRecommender
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 DescribeRecommender
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeRecommender)))
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 Recommender -> Int -> DescribeRecommenderResponse
DescribeRecommenderResponse'
            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
"recommender")
            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 DescribeRecommender where
  hashWithSalt :: Int -> DescribeRecommender -> Int
hashWithSalt Int
_salt DescribeRecommender' {Text
recommenderArn :: Text
$sel:recommenderArn:DescribeRecommender' :: DescribeRecommender -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
recommenderArn

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

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

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

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

-- | /See:/ 'newDescribeRecommenderResponse' smart constructor.
data DescribeRecommenderResponse = DescribeRecommenderResponse'
  { -- | The properties of the recommender.
    DescribeRecommenderResponse -> Maybe Recommender
recommender :: Prelude.Maybe Recommender,
    -- | The response's http status code.
    DescribeRecommenderResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeRecommenderResponse -> DescribeRecommenderResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeRecommenderResponse -> DescribeRecommenderResponse -> Bool
$c/= :: DescribeRecommenderResponse -> DescribeRecommenderResponse -> Bool
== :: DescribeRecommenderResponse -> DescribeRecommenderResponse -> Bool
$c== :: DescribeRecommenderResponse -> DescribeRecommenderResponse -> Bool
Prelude.Eq, ReadPrec [DescribeRecommenderResponse]
ReadPrec DescribeRecommenderResponse
Int -> ReadS DescribeRecommenderResponse
ReadS [DescribeRecommenderResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeRecommenderResponse]
$creadListPrec :: ReadPrec [DescribeRecommenderResponse]
readPrec :: ReadPrec DescribeRecommenderResponse
$creadPrec :: ReadPrec DescribeRecommenderResponse
readList :: ReadS [DescribeRecommenderResponse]
$creadList :: ReadS [DescribeRecommenderResponse]
readsPrec :: Int -> ReadS DescribeRecommenderResponse
$creadsPrec :: Int -> ReadS DescribeRecommenderResponse
Prelude.Read, Int -> DescribeRecommenderResponse -> ShowS
[DescribeRecommenderResponse] -> ShowS
DescribeRecommenderResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeRecommenderResponse] -> ShowS
$cshowList :: [DescribeRecommenderResponse] -> ShowS
show :: DescribeRecommenderResponse -> String
$cshow :: DescribeRecommenderResponse -> String
showsPrec :: Int -> DescribeRecommenderResponse -> ShowS
$cshowsPrec :: Int -> DescribeRecommenderResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeRecommenderResponse x -> DescribeRecommenderResponse
forall x.
DescribeRecommenderResponse -> Rep DescribeRecommenderResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeRecommenderResponse x -> DescribeRecommenderResponse
$cfrom :: forall x.
DescribeRecommenderResponse -> Rep DescribeRecommenderResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeRecommenderResponse' 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:
--
-- 'recommender', 'describeRecommenderResponse_recommender' - The properties of the recommender.
--
-- 'httpStatus', 'describeRecommenderResponse_httpStatus' - The response's http status code.
newDescribeRecommenderResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeRecommenderResponse
newDescribeRecommenderResponse :: Int -> DescribeRecommenderResponse
newDescribeRecommenderResponse Int
pHttpStatus_ =
  DescribeRecommenderResponse'
    { $sel:recommender:DescribeRecommenderResponse' :: Maybe Recommender
recommender =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeRecommenderResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The properties of the recommender.
describeRecommenderResponse_recommender :: Lens.Lens' DescribeRecommenderResponse (Prelude.Maybe Recommender)
describeRecommenderResponse_recommender :: Lens' DescribeRecommenderResponse (Maybe Recommender)
describeRecommenderResponse_recommender = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeRecommenderResponse' {Maybe Recommender
recommender :: Maybe Recommender
$sel:recommender:DescribeRecommenderResponse' :: DescribeRecommenderResponse -> Maybe Recommender
recommender} -> Maybe Recommender
recommender) (\s :: DescribeRecommenderResponse
s@DescribeRecommenderResponse' {} Maybe Recommender
a -> DescribeRecommenderResponse
s {$sel:recommender:DescribeRecommenderResponse' :: Maybe Recommender
recommender = Maybe Recommender
a} :: DescribeRecommenderResponse)

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

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