{-# 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.ServiceCatalog.DescribeConstraint
-- 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 information about the specified constraint.
module Amazonka.ServiceCatalog.DescribeConstraint
  ( -- * Creating a Request
    DescribeConstraint (..),
    newDescribeConstraint,

    -- * Request Lenses
    describeConstraint_acceptLanguage,
    describeConstraint_id,

    -- * Destructuring the Response
    DescribeConstraintResponse (..),
    newDescribeConstraintResponse,

    -- * Response Lenses
    describeConstraintResponse_constraintDetail,
    describeConstraintResponse_constraintParameters,
    describeConstraintResponse_status,
    describeConstraintResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDescribeConstraint' smart constructor.
data DescribeConstraint = DescribeConstraint'
  { -- | The language code.
    --
    -- -   @en@ - English (default)
    --
    -- -   @jp@ - Japanese
    --
    -- -   @zh@ - Chinese
    DescribeConstraint -> Maybe Text
acceptLanguage :: Prelude.Maybe Prelude.Text,
    -- | The identifier of the constraint.
    DescribeConstraint -> Text
id :: Prelude.Text
  }
  deriving (DescribeConstraint -> DescribeConstraint -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeConstraint -> DescribeConstraint -> Bool
$c/= :: DescribeConstraint -> DescribeConstraint -> Bool
== :: DescribeConstraint -> DescribeConstraint -> Bool
$c== :: DescribeConstraint -> DescribeConstraint -> Bool
Prelude.Eq, ReadPrec [DescribeConstraint]
ReadPrec DescribeConstraint
Int -> ReadS DescribeConstraint
ReadS [DescribeConstraint]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeConstraint]
$creadListPrec :: ReadPrec [DescribeConstraint]
readPrec :: ReadPrec DescribeConstraint
$creadPrec :: ReadPrec DescribeConstraint
readList :: ReadS [DescribeConstraint]
$creadList :: ReadS [DescribeConstraint]
readsPrec :: Int -> ReadS DescribeConstraint
$creadsPrec :: Int -> ReadS DescribeConstraint
Prelude.Read, Int -> DescribeConstraint -> ShowS
[DescribeConstraint] -> ShowS
DescribeConstraint -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeConstraint] -> ShowS
$cshowList :: [DescribeConstraint] -> ShowS
show :: DescribeConstraint -> String
$cshow :: DescribeConstraint -> String
showsPrec :: Int -> DescribeConstraint -> ShowS
$cshowsPrec :: Int -> DescribeConstraint -> ShowS
Prelude.Show, forall x. Rep DescribeConstraint x -> DescribeConstraint
forall x. DescribeConstraint -> Rep DescribeConstraint x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeConstraint x -> DescribeConstraint
$cfrom :: forall x. DescribeConstraint -> Rep DescribeConstraint x
Prelude.Generic)

-- |
-- Create a value of 'DescribeConstraint' 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:
--
-- 'acceptLanguage', 'describeConstraint_acceptLanguage' - The language code.
--
-- -   @en@ - English (default)
--
-- -   @jp@ - Japanese
--
-- -   @zh@ - Chinese
--
-- 'id', 'describeConstraint_id' - The identifier of the constraint.
newDescribeConstraint ::
  -- | 'id'
  Prelude.Text ->
  DescribeConstraint
newDescribeConstraint :: Text -> DescribeConstraint
newDescribeConstraint Text
pId_ =
  DescribeConstraint'
    { $sel:acceptLanguage:DescribeConstraint' :: Maybe Text
acceptLanguage =
        forall a. Maybe a
Prelude.Nothing,
      $sel:id:DescribeConstraint' :: Text
id = Text
pId_
    }

-- | The language code.
--
-- -   @en@ - English (default)
--
-- -   @jp@ - Japanese
--
-- -   @zh@ - Chinese
describeConstraint_acceptLanguage :: Lens.Lens' DescribeConstraint (Prelude.Maybe Prelude.Text)
describeConstraint_acceptLanguage :: Lens' DescribeConstraint (Maybe Text)
describeConstraint_acceptLanguage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeConstraint' {Maybe Text
acceptLanguage :: Maybe Text
$sel:acceptLanguage:DescribeConstraint' :: DescribeConstraint -> Maybe Text
acceptLanguage} -> Maybe Text
acceptLanguage) (\s :: DescribeConstraint
s@DescribeConstraint' {} Maybe Text
a -> DescribeConstraint
s {$sel:acceptLanguage:DescribeConstraint' :: Maybe Text
acceptLanguage = Maybe Text
a} :: DescribeConstraint)

-- | The identifier of the constraint.
describeConstraint_id :: Lens.Lens' DescribeConstraint Prelude.Text
describeConstraint_id :: Lens' DescribeConstraint Text
describeConstraint_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeConstraint' {Text
id :: Text
$sel:id:DescribeConstraint' :: DescribeConstraint -> Text
id} -> Text
id) (\s :: DescribeConstraint
s@DescribeConstraint' {} Text
a -> DescribeConstraint
s {$sel:id:DescribeConstraint' :: Text
id = Text
a} :: DescribeConstraint)

instance Core.AWSRequest DescribeConstraint where
  type
    AWSResponse DescribeConstraint =
      DescribeConstraintResponse
  request :: (Service -> Service)
-> DescribeConstraint -> Request DescribeConstraint
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 DescribeConstraint
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeConstraint)))
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 ConstraintDetail
-> Maybe Text
-> Maybe RequestStatus
-> Int
-> DescribeConstraintResponse
DescribeConstraintResponse'
            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
"ConstraintDetail")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"ConstraintParameters")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"Status")
            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 DescribeConstraint where
  hashWithSalt :: Int -> DescribeConstraint -> Int
hashWithSalt Int
_salt DescribeConstraint' {Maybe Text
Text
id :: Text
acceptLanguage :: Maybe Text
$sel:id:DescribeConstraint' :: DescribeConstraint -> Text
$sel:acceptLanguage:DescribeConstraint' :: DescribeConstraint -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
acceptLanguage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
id

instance Prelude.NFData DescribeConstraint where
  rnf :: DescribeConstraint -> ()
rnf DescribeConstraint' {Maybe Text
Text
id :: Text
acceptLanguage :: Maybe Text
$sel:id:DescribeConstraint' :: DescribeConstraint -> Text
$sel:acceptLanguage:DescribeConstraint' :: DescribeConstraint -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
acceptLanguage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
id

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

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

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

-- | /See:/ 'newDescribeConstraintResponse' smart constructor.
data DescribeConstraintResponse = DescribeConstraintResponse'
  { -- | Information about the constraint.
    DescribeConstraintResponse -> Maybe ConstraintDetail
constraintDetail :: Prelude.Maybe ConstraintDetail,
    -- | The constraint parameters.
    DescribeConstraintResponse -> Maybe Text
constraintParameters :: Prelude.Maybe Prelude.Text,
    -- | The status of the current request.
    DescribeConstraintResponse -> Maybe RequestStatus
status :: Prelude.Maybe RequestStatus,
    -- | The response's http status code.
    DescribeConstraintResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeConstraintResponse -> DescribeConstraintResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeConstraintResponse -> DescribeConstraintResponse -> Bool
$c/= :: DescribeConstraintResponse -> DescribeConstraintResponse -> Bool
== :: DescribeConstraintResponse -> DescribeConstraintResponse -> Bool
$c== :: DescribeConstraintResponse -> DescribeConstraintResponse -> Bool
Prelude.Eq, ReadPrec [DescribeConstraintResponse]
ReadPrec DescribeConstraintResponse
Int -> ReadS DescribeConstraintResponse
ReadS [DescribeConstraintResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeConstraintResponse]
$creadListPrec :: ReadPrec [DescribeConstraintResponse]
readPrec :: ReadPrec DescribeConstraintResponse
$creadPrec :: ReadPrec DescribeConstraintResponse
readList :: ReadS [DescribeConstraintResponse]
$creadList :: ReadS [DescribeConstraintResponse]
readsPrec :: Int -> ReadS DescribeConstraintResponse
$creadsPrec :: Int -> ReadS DescribeConstraintResponse
Prelude.Read, Int -> DescribeConstraintResponse -> ShowS
[DescribeConstraintResponse] -> ShowS
DescribeConstraintResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeConstraintResponse] -> ShowS
$cshowList :: [DescribeConstraintResponse] -> ShowS
show :: DescribeConstraintResponse -> String
$cshow :: DescribeConstraintResponse -> String
showsPrec :: Int -> DescribeConstraintResponse -> ShowS
$cshowsPrec :: Int -> DescribeConstraintResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeConstraintResponse x -> DescribeConstraintResponse
forall x.
DescribeConstraintResponse -> Rep DescribeConstraintResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeConstraintResponse x -> DescribeConstraintResponse
$cfrom :: forall x.
DescribeConstraintResponse -> Rep DescribeConstraintResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeConstraintResponse' 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:
--
-- 'constraintDetail', 'describeConstraintResponse_constraintDetail' - Information about the constraint.
--
-- 'constraintParameters', 'describeConstraintResponse_constraintParameters' - The constraint parameters.
--
-- 'status', 'describeConstraintResponse_status' - The status of the current request.
--
-- 'httpStatus', 'describeConstraintResponse_httpStatus' - The response's http status code.
newDescribeConstraintResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeConstraintResponse
newDescribeConstraintResponse :: Int -> DescribeConstraintResponse
newDescribeConstraintResponse Int
pHttpStatus_ =
  DescribeConstraintResponse'
    { $sel:constraintDetail:DescribeConstraintResponse' :: Maybe ConstraintDetail
constraintDetail =
        forall a. Maybe a
Prelude.Nothing,
      $sel:constraintParameters:DescribeConstraintResponse' :: Maybe Text
constraintParameters = forall a. Maybe a
Prelude.Nothing,
      $sel:status:DescribeConstraintResponse' :: Maybe RequestStatus
status = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeConstraintResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Information about the constraint.
describeConstraintResponse_constraintDetail :: Lens.Lens' DescribeConstraintResponse (Prelude.Maybe ConstraintDetail)
describeConstraintResponse_constraintDetail :: Lens' DescribeConstraintResponse (Maybe ConstraintDetail)
describeConstraintResponse_constraintDetail = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeConstraintResponse' {Maybe ConstraintDetail
constraintDetail :: Maybe ConstraintDetail
$sel:constraintDetail:DescribeConstraintResponse' :: DescribeConstraintResponse -> Maybe ConstraintDetail
constraintDetail} -> Maybe ConstraintDetail
constraintDetail) (\s :: DescribeConstraintResponse
s@DescribeConstraintResponse' {} Maybe ConstraintDetail
a -> DescribeConstraintResponse
s {$sel:constraintDetail:DescribeConstraintResponse' :: Maybe ConstraintDetail
constraintDetail = Maybe ConstraintDetail
a} :: DescribeConstraintResponse)

-- | The constraint parameters.
describeConstraintResponse_constraintParameters :: Lens.Lens' DescribeConstraintResponse (Prelude.Maybe Prelude.Text)
describeConstraintResponse_constraintParameters :: Lens' DescribeConstraintResponse (Maybe Text)
describeConstraintResponse_constraintParameters = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeConstraintResponse' {Maybe Text
constraintParameters :: Maybe Text
$sel:constraintParameters:DescribeConstraintResponse' :: DescribeConstraintResponse -> Maybe Text
constraintParameters} -> Maybe Text
constraintParameters) (\s :: DescribeConstraintResponse
s@DescribeConstraintResponse' {} Maybe Text
a -> DescribeConstraintResponse
s {$sel:constraintParameters:DescribeConstraintResponse' :: Maybe Text
constraintParameters = Maybe Text
a} :: DescribeConstraintResponse)

-- | The status of the current request.
describeConstraintResponse_status :: Lens.Lens' DescribeConstraintResponse (Prelude.Maybe RequestStatus)
describeConstraintResponse_status :: Lens' DescribeConstraintResponse (Maybe RequestStatus)
describeConstraintResponse_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeConstraintResponse' {Maybe RequestStatus
status :: Maybe RequestStatus
$sel:status:DescribeConstraintResponse' :: DescribeConstraintResponse -> Maybe RequestStatus
status} -> Maybe RequestStatus
status) (\s :: DescribeConstraintResponse
s@DescribeConstraintResponse' {} Maybe RequestStatus
a -> DescribeConstraintResponse
s {$sel:status:DescribeConstraintResponse' :: Maybe RequestStatus
status = Maybe RequestStatus
a} :: DescribeConstraintResponse)

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

instance Prelude.NFData DescribeConstraintResponse where
  rnf :: DescribeConstraintResponse -> ()
rnf DescribeConstraintResponse' {Int
Maybe Text
Maybe ConstraintDetail
Maybe RequestStatus
httpStatus :: Int
status :: Maybe RequestStatus
constraintParameters :: Maybe Text
constraintDetail :: Maybe ConstraintDetail
$sel:httpStatus:DescribeConstraintResponse' :: DescribeConstraintResponse -> Int
$sel:status:DescribeConstraintResponse' :: DescribeConstraintResponse -> Maybe RequestStatus
$sel:constraintParameters:DescribeConstraintResponse' :: DescribeConstraintResponse -> Maybe Text
$sel:constraintDetail:DescribeConstraintResponse' :: DescribeConstraintResponse -> Maybe ConstraintDetail
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ConstraintDetail
constraintDetail
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
constraintParameters
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RequestStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus