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

    -- * Request Lenses
    updateResolverConfig_resourceId,
    updateResolverConfig_autodefinedReverseFlag,

    -- * Destructuring the Response
    UpdateResolverConfigResponse (..),
    newUpdateResolverConfigResponse,

    -- * Response Lenses
    updateResolverConfigResponse_resolverConfig,
    updateResolverConfigResponse_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:/ 'newUpdateResolverConfig' smart constructor.
data UpdateResolverConfig = UpdateResolverConfig'
  { -- | Resource ID of the Amazon VPC that you want to update the Resolver
    -- configuration for.
    UpdateResolverConfig -> Text
resourceId :: Prelude.Text,
    -- | Indicates whether or not the Resolver will create autodefined rules for
    -- reverse DNS lookups. This is enabled by default. Disabling this option
    -- will also affect EC2-Classic instances using ClassicLink. For more
    -- information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink>
    -- in the /Amazon EC2 guide/.
    --
    -- It can take some time for the status change to be completed.
    UpdateResolverConfig -> AutodefinedReverseFlag
autodefinedReverseFlag :: AutodefinedReverseFlag
  }
  deriving (UpdateResolverConfig -> UpdateResolverConfig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateResolverConfig -> UpdateResolverConfig -> Bool
$c/= :: UpdateResolverConfig -> UpdateResolverConfig -> Bool
== :: UpdateResolverConfig -> UpdateResolverConfig -> Bool
$c== :: UpdateResolverConfig -> UpdateResolverConfig -> Bool
Prelude.Eq, ReadPrec [UpdateResolverConfig]
ReadPrec UpdateResolverConfig
Int -> ReadS UpdateResolverConfig
ReadS [UpdateResolverConfig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateResolverConfig]
$creadListPrec :: ReadPrec [UpdateResolverConfig]
readPrec :: ReadPrec UpdateResolverConfig
$creadPrec :: ReadPrec UpdateResolverConfig
readList :: ReadS [UpdateResolverConfig]
$creadList :: ReadS [UpdateResolverConfig]
readsPrec :: Int -> ReadS UpdateResolverConfig
$creadsPrec :: Int -> ReadS UpdateResolverConfig
Prelude.Read, Int -> UpdateResolverConfig -> ShowS
[UpdateResolverConfig] -> ShowS
UpdateResolverConfig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateResolverConfig] -> ShowS
$cshowList :: [UpdateResolverConfig] -> ShowS
show :: UpdateResolverConfig -> String
$cshow :: UpdateResolverConfig -> String
showsPrec :: Int -> UpdateResolverConfig -> ShowS
$cshowsPrec :: Int -> UpdateResolverConfig -> ShowS
Prelude.Show, forall x. Rep UpdateResolverConfig x -> UpdateResolverConfig
forall x. UpdateResolverConfig -> Rep UpdateResolverConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateResolverConfig x -> UpdateResolverConfig
$cfrom :: forall x. UpdateResolverConfig -> Rep UpdateResolverConfig x
Prelude.Generic)

-- |
-- Create a value of 'UpdateResolverConfig' 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', 'updateResolverConfig_resourceId' - Resource ID of the Amazon VPC that you want to update the Resolver
-- configuration for.
--
-- 'autodefinedReverseFlag', 'updateResolverConfig_autodefinedReverseFlag' - Indicates whether or not the Resolver will create autodefined rules for
-- reverse DNS lookups. This is enabled by default. Disabling this option
-- will also affect EC2-Classic instances using ClassicLink. For more
-- information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink>
-- in the /Amazon EC2 guide/.
--
-- It can take some time for the status change to be completed.
newUpdateResolverConfig ::
  -- | 'resourceId'
  Prelude.Text ->
  -- | 'autodefinedReverseFlag'
  AutodefinedReverseFlag ->
  UpdateResolverConfig
newUpdateResolverConfig :: Text -> AutodefinedReverseFlag -> UpdateResolverConfig
newUpdateResolverConfig
  Text
pResourceId_
  AutodefinedReverseFlag
pAutodefinedReverseFlag_ =
    UpdateResolverConfig'
      { $sel:resourceId:UpdateResolverConfig' :: Text
resourceId = Text
pResourceId_,
        $sel:autodefinedReverseFlag:UpdateResolverConfig' :: AutodefinedReverseFlag
autodefinedReverseFlag = AutodefinedReverseFlag
pAutodefinedReverseFlag_
      }

-- | Resource ID of the Amazon VPC that you want to update the Resolver
-- configuration for.
updateResolverConfig_resourceId :: Lens.Lens' UpdateResolverConfig Prelude.Text
updateResolverConfig_resourceId :: Lens' UpdateResolverConfig Text
updateResolverConfig_resourceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateResolverConfig' {Text
resourceId :: Text
$sel:resourceId:UpdateResolverConfig' :: UpdateResolverConfig -> Text
resourceId} -> Text
resourceId) (\s :: UpdateResolverConfig
s@UpdateResolverConfig' {} Text
a -> UpdateResolverConfig
s {$sel:resourceId:UpdateResolverConfig' :: Text
resourceId = Text
a} :: UpdateResolverConfig)

-- | Indicates whether or not the Resolver will create autodefined rules for
-- reverse DNS lookups. This is enabled by default. Disabling this option
-- will also affect EC2-Classic instances using ClassicLink. For more
-- information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink>
-- in the /Amazon EC2 guide/.
--
-- It can take some time for the status change to be completed.
updateResolverConfig_autodefinedReverseFlag :: Lens.Lens' UpdateResolverConfig AutodefinedReverseFlag
updateResolverConfig_autodefinedReverseFlag :: Lens' UpdateResolverConfig AutodefinedReverseFlag
updateResolverConfig_autodefinedReverseFlag = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateResolverConfig' {AutodefinedReverseFlag
autodefinedReverseFlag :: AutodefinedReverseFlag
$sel:autodefinedReverseFlag:UpdateResolverConfig' :: UpdateResolverConfig -> AutodefinedReverseFlag
autodefinedReverseFlag} -> AutodefinedReverseFlag
autodefinedReverseFlag) (\s :: UpdateResolverConfig
s@UpdateResolverConfig' {} AutodefinedReverseFlag
a -> UpdateResolverConfig
s {$sel:autodefinedReverseFlag:UpdateResolverConfig' :: AutodefinedReverseFlag
autodefinedReverseFlag = AutodefinedReverseFlag
a} :: UpdateResolverConfig)

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

instance Prelude.NFData UpdateResolverConfig where
  rnf :: UpdateResolverConfig -> ()
rnf UpdateResolverConfig' {Text
AutodefinedReverseFlag
autodefinedReverseFlag :: AutodefinedReverseFlag
resourceId :: Text
$sel:autodefinedReverseFlag:UpdateResolverConfig' :: UpdateResolverConfig -> AutodefinedReverseFlag
$sel:resourceId:UpdateResolverConfig' :: UpdateResolverConfig -> Text
..} =
    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 AutodefinedReverseFlag
autodefinedReverseFlag

instance Data.ToHeaders UpdateResolverConfig where
  toHeaders :: UpdateResolverConfig -> 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.UpdateResolverConfig" ::
                          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 UpdateResolverConfig where
  toJSON :: UpdateResolverConfig -> Value
toJSON UpdateResolverConfig' {Text
AutodefinedReverseFlag
autodefinedReverseFlag :: AutodefinedReverseFlag
resourceId :: Text
$sel:autodefinedReverseFlag:UpdateResolverConfig' :: UpdateResolverConfig -> AutodefinedReverseFlag
$sel:resourceId:UpdateResolverConfig' :: UpdateResolverConfig -> 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),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"AutodefinedReverseFlag"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= AutodefinedReverseFlag
autodefinedReverseFlag
              )
          ]
      )

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

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

-- | /See:/ 'newUpdateResolverConfigResponse' smart constructor.
data UpdateResolverConfigResponse = UpdateResolverConfigResponse'
  { -- | An array that contains settings for the specified Resolver
    -- configuration.
    UpdateResolverConfigResponse -> Maybe ResolverConfig
resolverConfig :: Prelude.Maybe ResolverConfig,
    -- | The response's http status code.
    UpdateResolverConfigResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (UpdateResolverConfigResponse
-> UpdateResolverConfigResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateResolverConfigResponse
-> UpdateResolverConfigResponse -> Bool
$c/= :: UpdateResolverConfigResponse
-> UpdateResolverConfigResponse -> Bool
== :: UpdateResolverConfigResponse
-> UpdateResolverConfigResponse -> Bool
$c== :: UpdateResolverConfigResponse
-> UpdateResolverConfigResponse -> Bool
Prelude.Eq, ReadPrec [UpdateResolverConfigResponse]
ReadPrec UpdateResolverConfigResponse
Int -> ReadS UpdateResolverConfigResponse
ReadS [UpdateResolverConfigResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateResolverConfigResponse]
$creadListPrec :: ReadPrec [UpdateResolverConfigResponse]
readPrec :: ReadPrec UpdateResolverConfigResponse
$creadPrec :: ReadPrec UpdateResolverConfigResponse
readList :: ReadS [UpdateResolverConfigResponse]
$creadList :: ReadS [UpdateResolverConfigResponse]
readsPrec :: Int -> ReadS UpdateResolverConfigResponse
$creadsPrec :: Int -> ReadS UpdateResolverConfigResponse
Prelude.Read, Int -> UpdateResolverConfigResponse -> ShowS
[UpdateResolverConfigResponse] -> ShowS
UpdateResolverConfigResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateResolverConfigResponse] -> ShowS
$cshowList :: [UpdateResolverConfigResponse] -> ShowS
show :: UpdateResolverConfigResponse -> String
$cshow :: UpdateResolverConfigResponse -> String
showsPrec :: Int -> UpdateResolverConfigResponse -> ShowS
$cshowsPrec :: Int -> UpdateResolverConfigResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateResolverConfigResponse x -> UpdateResolverConfigResponse
forall x.
UpdateResolverConfigResponse -> Rep UpdateResolverConfigResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateResolverConfigResponse x -> UpdateResolverConfigResponse
$cfrom :: forall x.
UpdateResolverConfigResponse -> Rep UpdateResolverConfigResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateResolverConfigResponse' 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', 'updateResolverConfigResponse_resolverConfig' - An array that contains settings for the specified Resolver
-- configuration.
--
-- 'httpStatus', 'updateResolverConfigResponse_httpStatus' - The response's http status code.
newUpdateResolverConfigResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateResolverConfigResponse
newUpdateResolverConfigResponse :: Int -> UpdateResolverConfigResponse
newUpdateResolverConfigResponse Int
pHttpStatus_ =
  UpdateResolverConfigResponse'
    { $sel:resolverConfig:UpdateResolverConfigResponse' :: Maybe ResolverConfig
resolverConfig =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:UpdateResolverConfigResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | An array that contains settings for the specified Resolver
-- configuration.
updateResolverConfigResponse_resolverConfig :: Lens.Lens' UpdateResolverConfigResponse (Prelude.Maybe ResolverConfig)
updateResolverConfigResponse_resolverConfig :: Lens' UpdateResolverConfigResponse (Maybe ResolverConfig)
updateResolverConfigResponse_resolverConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateResolverConfigResponse' {Maybe ResolverConfig
resolverConfig :: Maybe ResolverConfig
$sel:resolverConfig:UpdateResolverConfigResponse' :: UpdateResolverConfigResponse -> Maybe ResolverConfig
resolverConfig} -> Maybe ResolverConfig
resolverConfig) (\s :: UpdateResolverConfigResponse
s@UpdateResolverConfigResponse' {} Maybe ResolverConfig
a -> UpdateResolverConfigResponse
s {$sel:resolverConfig:UpdateResolverConfigResponse' :: Maybe ResolverConfig
resolverConfig = Maybe ResolverConfig
a} :: UpdateResolverConfigResponse)

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

instance Prelude.NFData UpdateResolverConfigResponse where
  rnf :: UpdateResolverConfigResponse -> ()
rnf UpdateResolverConfigResponse' {Int
Maybe ResolverConfig
httpStatus :: Int
resolverConfig :: Maybe ResolverConfig
$sel:httpStatus:UpdateResolverConfigResponse' :: UpdateResolverConfigResponse -> Int
$sel:resolverConfig:UpdateResolverConfigResponse' :: UpdateResolverConfigResponse -> 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