{-# 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.Route53Resolver.GetResolverConfig
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves the behavior configuration of Route 53 Resolver behavior for a
-- single VPC from Amazon Virtual Private Cloud.
module Amazonka.Route53Resolver.GetResolverConfig
  ( -- * Creating a Request
    GetResolverConfig (..),
    newGetResolverConfig,

    -- * Request Lenses
    getResolverConfig_resourceId,

    -- * Destructuring the Response
    GetResolverConfigResponse (..),
    newGetResolverConfigResponse,

    -- * Response Lenses
    getResolverConfigResponse_resolverConfig,
    getResolverConfigResponse_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.Route53Resolver.Types

-- | /See:/ 'newGetResolverConfig' smart constructor.
data GetResolverConfig = GetResolverConfig'
  { -- | Resource ID of the Amazon VPC that you want to get information about.
    GetResolverConfig -> Text
resourceId :: Prelude.Text
  }
  deriving (GetResolverConfig -> GetResolverConfig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetResolverConfig -> GetResolverConfig -> Bool
$c/= :: GetResolverConfig -> GetResolverConfig -> Bool
== :: GetResolverConfig -> GetResolverConfig -> Bool
$c== :: GetResolverConfig -> GetResolverConfig -> Bool
Prelude.Eq, ReadPrec [GetResolverConfig]
ReadPrec GetResolverConfig
Int -> ReadS GetResolverConfig
ReadS [GetResolverConfig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetResolverConfig]
$creadListPrec :: ReadPrec [GetResolverConfig]
readPrec :: ReadPrec GetResolverConfig
$creadPrec :: ReadPrec GetResolverConfig
readList :: ReadS [GetResolverConfig]
$creadList :: ReadS [GetResolverConfig]
readsPrec :: Int -> ReadS GetResolverConfig
$creadsPrec :: Int -> ReadS GetResolverConfig
Prelude.Read, Int -> GetResolverConfig -> ShowS
[GetResolverConfig] -> ShowS
GetResolverConfig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetResolverConfig] -> ShowS
$cshowList :: [GetResolverConfig] -> ShowS
show :: GetResolverConfig -> String
$cshow :: GetResolverConfig -> String
showsPrec :: Int -> GetResolverConfig -> ShowS
$cshowsPrec :: Int -> GetResolverConfig -> ShowS
Prelude.Show, forall x. Rep GetResolverConfig x -> GetResolverConfig
forall x. GetResolverConfig -> Rep GetResolverConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetResolverConfig x -> GetResolverConfig
$cfrom :: forall x. GetResolverConfig -> Rep GetResolverConfig x
Prelude.Generic)

-- |
-- Create a value of 'GetResolverConfig' 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:
--
-- 'resourceId', 'getResolverConfig_resourceId' - Resource ID of the Amazon VPC that you want to get information about.
newGetResolverConfig ::
  -- | 'resourceId'
  Prelude.Text ->
  GetResolverConfig
newGetResolverConfig :: Text -> GetResolverConfig
newGetResolverConfig Text
pResourceId_ =
  GetResolverConfig' {$sel:resourceId:GetResolverConfig' :: Text
resourceId = Text
pResourceId_}

-- | Resource ID of the Amazon VPC that you want to get information about.
getResolverConfig_resourceId :: Lens.Lens' GetResolverConfig Prelude.Text
getResolverConfig_resourceId :: Lens' GetResolverConfig Text
getResolverConfig_resourceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResolverConfig' {Text
resourceId :: Text
$sel:resourceId:GetResolverConfig' :: GetResolverConfig -> Text
resourceId} -> Text
resourceId) (\s :: GetResolverConfig
s@GetResolverConfig' {} Text
a -> GetResolverConfig
s {$sel:resourceId:GetResolverConfig' :: Text
resourceId = Text
a} :: GetResolverConfig)

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

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

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

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

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

-- | /See:/ 'newGetResolverConfigResponse' smart constructor.
data GetResolverConfigResponse = GetResolverConfigResponse'
  { -- | Information about the behavior configuration of Route 53 Resolver
    -- behavior for the VPC you specified in the @GetResolverConfig@ request.
    GetResolverConfigResponse -> Maybe ResolverConfig
resolverConfig :: Prelude.Maybe ResolverConfig,
    -- | The response's http status code.
    GetResolverConfigResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetResolverConfigResponse -> GetResolverConfigResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetResolverConfigResponse -> GetResolverConfigResponse -> Bool
$c/= :: GetResolverConfigResponse -> GetResolverConfigResponse -> Bool
== :: GetResolverConfigResponse -> GetResolverConfigResponse -> Bool
$c== :: GetResolverConfigResponse -> GetResolverConfigResponse -> Bool
Prelude.Eq, ReadPrec [GetResolverConfigResponse]
ReadPrec GetResolverConfigResponse
Int -> ReadS GetResolverConfigResponse
ReadS [GetResolverConfigResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetResolverConfigResponse]
$creadListPrec :: ReadPrec [GetResolverConfigResponse]
readPrec :: ReadPrec GetResolverConfigResponse
$creadPrec :: ReadPrec GetResolverConfigResponse
readList :: ReadS [GetResolverConfigResponse]
$creadList :: ReadS [GetResolverConfigResponse]
readsPrec :: Int -> ReadS GetResolverConfigResponse
$creadsPrec :: Int -> ReadS GetResolverConfigResponse
Prelude.Read, Int -> GetResolverConfigResponse -> ShowS
[GetResolverConfigResponse] -> ShowS
GetResolverConfigResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetResolverConfigResponse] -> ShowS
$cshowList :: [GetResolverConfigResponse] -> ShowS
show :: GetResolverConfigResponse -> String
$cshow :: GetResolverConfigResponse -> String
showsPrec :: Int -> GetResolverConfigResponse -> ShowS
$cshowsPrec :: Int -> GetResolverConfigResponse -> ShowS
Prelude.Show, forall x.
Rep GetResolverConfigResponse x -> GetResolverConfigResponse
forall x.
GetResolverConfigResponse -> Rep GetResolverConfigResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetResolverConfigResponse x -> GetResolverConfigResponse
$cfrom :: forall x.
GetResolverConfigResponse -> Rep GetResolverConfigResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetResolverConfigResponse' 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:
--
-- 'resolverConfig', 'getResolverConfigResponse_resolverConfig' - Information about the behavior configuration of Route 53 Resolver
-- behavior for the VPC you specified in the @GetResolverConfig@ request.
--
-- 'httpStatus', 'getResolverConfigResponse_httpStatus' - The response's http status code.
newGetResolverConfigResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetResolverConfigResponse
newGetResolverConfigResponse :: Int -> GetResolverConfigResponse
newGetResolverConfigResponse Int
pHttpStatus_ =
  GetResolverConfigResponse'
    { $sel:resolverConfig:GetResolverConfigResponse' :: Maybe ResolverConfig
resolverConfig =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetResolverConfigResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Information about the behavior configuration of Route 53 Resolver
-- behavior for the VPC you specified in the @GetResolverConfig@ request.
getResolverConfigResponse_resolverConfig :: Lens.Lens' GetResolverConfigResponse (Prelude.Maybe ResolverConfig)
getResolverConfigResponse_resolverConfig :: Lens' GetResolverConfigResponse (Maybe ResolverConfig)
getResolverConfigResponse_resolverConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResolverConfigResponse' {Maybe ResolverConfig
resolverConfig :: Maybe ResolverConfig
$sel:resolverConfig:GetResolverConfigResponse' :: GetResolverConfigResponse -> Maybe ResolverConfig
resolverConfig} -> Maybe ResolverConfig
resolverConfig) (\s :: GetResolverConfigResponse
s@GetResolverConfigResponse' {} Maybe ResolverConfig
a -> GetResolverConfigResponse
s {$sel:resolverConfig:GetResolverConfigResponse' :: Maybe ResolverConfig
resolverConfig = Maybe ResolverConfig
a} :: GetResolverConfigResponse)

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

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