{-# 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.APIGateway.GetIntegrationResponse
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Represents a get integration response.
module Amazonka.APIGateway.GetIntegrationResponse
  ( -- * Creating a Request
    GetIntegrationResponse (..),
    newGetIntegrationResponse,

    -- * Request Lenses
    getIntegrationResponse_restApiId,
    getIntegrationResponse_resourceId,
    getIntegrationResponse_httpMethod,
    getIntegrationResponse_statusCode,

    -- * Destructuring the Response
    IntegrationResponse (..),
    newIntegrationResponse,

    -- * Response Lenses
    integrationResponse_contentHandling,
    integrationResponse_responseParameters,
    integrationResponse_responseTemplates,
    integrationResponse_selectionPattern,
    integrationResponse_statusCode,
  )
where

import Amazonka.APIGateway.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

-- | Represents a get integration response request.
--
-- /See:/ 'newGetIntegrationResponse' smart constructor.
data GetIntegrationResponse = GetIntegrationResponse'
  { -- | The string identifier of the associated RestApi.
    GetIntegrationResponse -> Text
restApiId :: Prelude.Text,
    -- | Specifies a get integration response request\'s resource identifier.
    GetIntegrationResponse -> Text
resourceId :: Prelude.Text,
    -- | Specifies a get integration response request\'s HTTP method.
    GetIntegrationResponse -> Text
httpMethod :: Prelude.Text,
    -- | Specifies a get integration response request\'s status code.
    GetIntegrationResponse -> Text
statusCode :: Prelude.Text
  }
  deriving (GetIntegrationResponse -> GetIntegrationResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetIntegrationResponse -> GetIntegrationResponse -> Bool
$c/= :: GetIntegrationResponse -> GetIntegrationResponse -> Bool
== :: GetIntegrationResponse -> GetIntegrationResponse -> Bool
$c== :: GetIntegrationResponse -> GetIntegrationResponse -> Bool
Prelude.Eq, ReadPrec [GetIntegrationResponse]
ReadPrec GetIntegrationResponse
Int -> ReadS GetIntegrationResponse
ReadS [GetIntegrationResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetIntegrationResponse]
$creadListPrec :: ReadPrec [GetIntegrationResponse]
readPrec :: ReadPrec GetIntegrationResponse
$creadPrec :: ReadPrec GetIntegrationResponse
readList :: ReadS [GetIntegrationResponse]
$creadList :: ReadS [GetIntegrationResponse]
readsPrec :: Int -> ReadS GetIntegrationResponse
$creadsPrec :: Int -> ReadS GetIntegrationResponse
Prelude.Read, Int -> GetIntegrationResponse -> ShowS
[GetIntegrationResponse] -> ShowS
GetIntegrationResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetIntegrationResponse] -> ShowS
$cshowList :: [GetIntegrationResponse] -> ShowS
show :: GetIntegrationResponse -> String
$cshow :: GetIntegrationResponse -> String
showsPrec :: Int -> GetIntegrationResponse -> ShowS
$cshowsPrec :: Int -> GetIntegrationResponse -> ShowS
Prelude.Show, forall x. Rep GetIntegrationResponse x -> GetIntegrationResponse
forall x. GetIntegrationResponse -> Rep GetIntegrationResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetIntegrationResponse x -> GetIntegrationResponse
$cfrom :: forall x. GetIntegrationResponse -> Rep GetIntegrationResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetIntegrationResponse' 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:
--
-- 'restApiId', 'getIntegrationResponse_restApiId' - The string identifier of the associated RestApi.
--
-- 'resourceId', 'getIntegrationResponse_resourceId' - Specifies a get integration response request\'s resource identifier.
--
-- 'httpMethod', 'getIntegrationResponse_httpMethod' - Specifies a get integration response request\'s HTTP method.
--
-- 'statusCode', 'getIntegrationResponse_statusCode' - Specifies a get integration response request\'s status code.
newGetIntegrationResponse ::
  -- | 'restApiId'
  Prelude.Text ->
  -- | 'resourceId'
  Prelude.Text ->
  -- | 'httpMethod'
  Prelude.Text ->
  -- | 'statusCode'
  Prelude.Text ->
  GetIntegrationResponse
newGetIntegrationResponse :: Text -> Text -> Text -> Text -> GetIntegrationResponse
newGetIntegrationResponse
  Text
pRestApiId_
  Text
pResourceId_
  Text
pHttpMethod_
  Text
pStatusCode_ =
    GetIntegrationResponse'
      { $sel:restApiId:GetIntegrationResponse' :: Text
restApiId = Text
pRestApiId_,
        $sel:resourceId:GetIntegrationResponse' :: Text
resourceId = Text
pResourceId_,
        $sel:httpMethod:GetIntegrationResponse' :: Text
httpMethod = Text
pHttpMethod_,
        $sel:statusCode:GetIntegrationResponse' :: Text
statusCode = Text
pStatusCode_
      }

-- | The string identifier of the associated RestApi.
getIntegrationResponse_restApiId :: Lens.Lens' GetIntegrationResponse Prelude.Text
getIntegrationResponse_restApiId :: Lens' GetIntegrationResponse Text
getIntegrationResponse_restApiId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetIntegrationResponse' {Text
restApiId :: Text
$sel:restApiId:GetIntegrationResponse' :: GetIntegrationResponse -> Text
restApiId} -> Text
restApiId) (\s :: GetIntegrationResponse
s@GetIntegrationResponse' {} Text
a -> GetIntegrationResponse
s {$sel:restApiId:GetIntegrationResponse' :: Text
restApiId = Text
a} :: GetIntegrationResponse)

-- | Specifies a get integration response request\'s resource identifier.
getIntegrationResponse_resourceId :: Lens.Lens' GetIntegrationResponse Prelude.Text
getIntegrationResponse_resourceId :: Lens' GetIntegrationResponse Text
getIntegrationResponse_resourceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetIntegrationResponse' {Text
resourceId :: Text
$sel:resourceId:GetIntegrationResponse' :: GetIntegrationResponse -> Text
resourceId} -> Text
resourceId) (\s :: GetIntegrationResponse
s@GetIntegrationResponse' {} Text
a -> GetIntegrationResponse
s {$sel:resourceId:GetIntegrationResponse' :: Text
resourceId = Text
a} :: GetIntegrationResponse)

-- | Specifies a get integration response request\'s HTTP method.
getIntegrationResponse_httpMethod :: Lens.Lens' GetIntegrationResponse Prelude.Text
getIntegrationResponse_httpMethod :: Lens' GetIntegrationResponse Text
getIntegrationResponse_httpMethod = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetIntegrationResponse' {Text
httpMethod :: Text
$sel:httpMethod:GetIntegrationResponse' :: GetIntegrationResponse -> Text
httpMethod} -> Text
httpMethod) (\s :: GetIntegrationResponse
s@GetIntegrationResponse' {} Text
a -> GetIntegrationResponse
s {$sel:httpMethod:GetIntegrationResponse' :: Text
httpMethod = Text
a} :: GetIntegrationResponse)

-- | Specifies a get integration response request\'s status code.
getIntegrationResponse_statusCode :: Lens.Lens' GetIntegrationResponse Prelude.Text
getIntegrationResponse_statusCode :: Lens' GetIntegrationResponse Text
getIntegrationResponse_statusCode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetIntegrationResponse' {Text
statusCode :: Text
$sel:statusCode:GetIntegrationResponse' :: GetIntegrationResponse -> Text
statusCode} -> Text
statusCode) (\s :: GetIntegrationResponse
s@GetIntegrationResponse' {} Text
a -> GetIntegrationResponse
s {$sel:statusCode:GetIntegrationResponse' :: Text
statusCode = Text
a} :: GetIntegrationResponse)

instance Core.AWSRequest GetIntegrationResponse where
  type
    AWSResponse GetIntegrationResponse =
      IntegrationResponse
  request :: (Service -> Service)
-> GetIntegrationResponse -> Request GetIntegrationResponse
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetIntegrationResponse
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetIntegrationResponse)))
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 -> forall a. FromJSON a => Object -> Either String a
Data.eitherParseJSON Object
x)

instance Prelude.Hashable GetIntegrationResponse where
  hashWithSalt :: Int -> GetIntegrationResponse -> Int
hashWithSalt Int
_salt GetIntegrationResponse' {Text
statusCode :: Text
httpMethod :: Text
resourceId :: Text
restApiId :: Text
$sel:statusCode:GetIntegrationResponse' :: GetIntegrationResponse -> Text
$sel:httpMethod:GetIntegrationResponse' :: GetIntegrationResponse -> Text
$sel:resourceId:GetIntegrationResponse' :: GetIntegrationResponse -> Text
$sel:restApiId:GetIntegrationResponse' :: GetIntegrationResponse -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
restApiId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
resourceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
httpMethod
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
statusCode

instance Prelude.NFData GetIntegrationResponse where
  rnf :: GetIntegrationResponse -> ()
rnf GetIntegrationResponse' {Text
statusCode :: Text
httpMethod :: Text
resourceId :: Text
restApiId :: Text
$sel:statusCode:GetIntegrationResponse' :: GetIntegrationResponse -> Text
$sel:httpMethod:GetIntegrationResponse' :: GetIntegrationResponse -> Text
$sel:resourceId:GetIntegrationResponse' :: GetIntegrationResponse -> Text
$sel:restApiId:GetIntegrationResponse' :: GetIntegrationResponse -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
restApiId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
resourceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
httpMethod
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
statusCode

instance Data.ToHeaders GetIntegrationResponse where
  toHeaders :: GetIntegrationResponse -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Accept"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# (ByteString
"application/json" :: Prelude.ByteString)
          ]
      )

instance Data.ToPath GetIntegrationResponse where
  toPath :: GetIntegrationResponse -> ByteString
toPath GetIntegrationResponse' {Text
statusCode :: Text
httpMethod :: Text
resourceId :: Text
restApiId :: Text
$sel:statusCode:GetIntegrationResponse' :: GetIntegrationResponse -> Text
$sel:httpMethod:GetIntegrationResponse' :: GetIntegrationResponse -> Text
$sel:resourceId:GetIntegrationResponse' :: GetIntegrationResponse -> Text
$sel:restApiId:GetIntegrationResponse' :: GetIntegrationResponse -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/restapis/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
restApiId,
        ByteString
"/resources/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
resourceId,
        ByteString
"/methods/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
httpMethod,
        ByteString
"/integration/responses/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
statusCode
      ]

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