{-# 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.Route53.UpdateTrafficPolicyComment
-- 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 comment for a specified traffic policy version.
module Amazonka.Route53.UpdateTrafficPolicyComment
  ( -- * Creating a Request
    UpdateTrafficPolicyComment (..),
    newUpdateTrafficPolicyComment,

    -- * Request Lenses
    updateTrafficPolicyComment_id,
    updateTrafficPolicyComment_version,
    updateTrafficPolicyComment_comment,

    -- * Destructuring the Response
    UpdateTrafficPolicyCommentResponse (..),
    newUpdateTrafficPolicyCommentResponse,

    -- * Response Lenses
    updateTrafficPolicyCommentResponse_httpStatus,
    updateTrafficPolicyCommentResponse_trafficPolicy,
  )
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.Route53.Types

-- | A complex type that contains information about the traffic policy that
-- you want to update the comment for.
--
-- /See:/ 'newUpdateTrafficPolicyComment' smart constructor.
data UpdateTrafficPolicyComment = UpdateTrafficPolicyComment'
  { -- | The value of @Id@ for the traffic policy that you want to update the
    -- comment for.
    UpdateTrafficPolicyComment -> Text
id :: Prelude.Text,
    -- | The value of @Version@ for the traffic policy that you want to update
    -- the comment for.
    UpdateTrafficPolicyComment -> Natural
version :: Prelude.Natural,
    -- | The new comment for the specified traffic policy and version.
    UpdateTrafficPolicyComment -> Text
comment :: Prelude.Text
  }
  deriving (UpdateTrafficPolicyComment -> UpdateTrafficPolicyComment -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateTrafficPolicyComment -> UpdateTrafficPolicyComment -> Bool
$c/= :: UpdateTrafficPolicyComment -> UpdateTrafficPolicyComment -> Bool
== :: UpdateTrafficPolicyComment -> UpdateTrafficPolicyComment -> Bool
$c== :: UpdateTrafficPolicyComment -> UpdateTrafficPolicyComment -> Bool
Prelude.Eq, ReadPrec [UpdateTrafficPolicyComment]
ReadPrec UpdateTrafficPolicyComment
Int -> ReadS UpdateTrafficPolicyComment
ReadS [UpdateTrafficPolicyComment]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateTrafficPolicyComment]
$creadListPrec :: ReadPrec [UpdateTrafficPolicyComment]
readPrec :: ReadPrec UpdateTrafficPolicyComment
$creadPrec :: ReadPrec UpdateTrafficPolicyComment
readList :: ReadS [UpdateTrafficPolicyComment]
$creadList :: ReadS [UpdateTrafficPolicyComment]
readsPrec :: Int -> ReadS UpdateTrafficPolicyComment
$creadsPrec :: Int -> ReadS UpdateTrafficPolicyComment
Prelude.Read, Int -> UpdateTrafficPolicyComment -> ShowS
[UpdateTrafficPolicyComment] -> ShowS
UpdateTrafficPolicyComment -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateTrafficPolicyComment] -> ShowS
$cshowList :: [UpdateTrafficPolicyComment] -> ShowS
show :: UpdateTrafficPolicyComment -> String
$cshow :: UpdateTrafficPolicyComment -> String
showsPrec :: Int -> UpdateTrafficPolicyComment -> ShowS
$cshowsPrec :: Int -> UpdateTrafficPolicyComment -> ShowS
Prelude.Show, forall x.
Rep UpdateTrafficPolicyComment x -> UpdateTrafficPolicyComment
forall x.
UpdateTrafficPolicyComment -> Rep UpdateTrafficPolicyComment x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateTrafficPolicyComment x -> UpdateTrafficPolicyComment
$cfrom :: forall x.
UpdateTrafficPolicyComment -> Rep UpdateTrafficPolicyComment x
Prelude.Generic)

-- |
-- Create a value of 'UpdateTrafficPolicyComment' 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:
--
-- 'id', 'updateTrafficPolicyComment_id' - The value of @Id@ for the traffic policy that you want to update the
-- comment for.
--
-- 'version', 'updateTrafficPolicyComment_version' - The value of @Version@ for the traffic policy that you want to update
-- the comment for.
--
-- 'comment', 'updateTrafficPolicyComment_comment' - The new comment for the specified traffic policy and version.
newUpdateTrafficPolicyComment ::
  -- | 'id'
  Prelude.Text ->
  -- | 'version'
  Prelude.Natural ->
  -- | 'comment'
  Prelude.Text ->
  UpdateTrafficPolicyComment
newUpdateTrafficPolicyComment :: Text -> Natural -> Text -> UpdateTrafficPolicyComment
newUpdateTrafficPolicyComment
  Text
pId_
  Natural
pVersion_
  Text
pComment_ =
    UpdateTrafficPolicyComment'
      { $sel:id:UpdateTrafficPolicyComment' :: Text
id = Text
pId_,
        $sel:version:UpdateTrafficPolicyComment' :: Natural
version = Natural
pVersion_,
        $sel:comment:UpdateTrafficPolicyComment' :: Text
comment = Text
pComment_
      }

-- | The value of @Id@ for the traffic policy that you want to update the
-- comment for.
updateTrafficPolicyComment_id :: Lens.Lens' UpdateTrafficPolicyComment Prelude.Text
updateTrafficPolicyComment_id :: Lens' UpdateTrafficPolicyComment Text
updateTrafficPolicyComment_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateTrafficPolicyComment' {Text
id :: Text
$sel:id:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Text
id} -> Text
id) (\s :: UpdateTrafficPolicyComment
s@UpdateTrafficPolicyComment' {} Text
a -> UpdateTrafficPolicyComment
s {$sel:id:UpdateTrafficPolicyComment' :: Text
id = Text
a} :: UpdateTrafficPolicyComment)

-- | The value of @Version@ for the traffic policy that you want to update
-- the comment for.
updateTrafficPolicyComment_version :: Lens.Lens' UpdateTrafficPolicyComment Prelude.Natural
updateTrafficPolicyComment_version :: Lens' UpdateTrafficPolicyComment Natural
updateTrafficPolicyComment_version = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateTrafficPolicyComment' {Natural
version :: Natural
$sel:version:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Natural
version} -> Natural
version) (\s :: UpdateTrafficPolicyComment
s@UpdateTrafficPolicyComment' {} Natural
a -> UpdateTrafficPolicyComment
s {$sel:version:UpdateTrafficPolicyComment' :: Natural
version = Natural
a} :: UpdateTrafficPolicyComment)

-- | The new comment for the specified traffic policy and version.
updateTrafficPolicyComment_comment :: Lens.Lens' UpdateTrafficPolicyComment Prelude.Text
updateTrafficPolicyComment_comment :: Lens' UpdateTrafficPolicyComment Text
updateTrafficPolicyComment_comment = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateTrafficPolicyComment' {Text
comment :: Text
$sel:comment:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Text
comment} -> Text
comment) (\s :: UpdateTrafficPolicyComment
s@UpdateTrafficPolicyComment' {} Text
a -> UpdateTrafficPolicyComment
s {$sel:comment:UpdateTrafficPolicyComment' :: Text
comment = Text
a} :: UpdateTrafficPolicyComment)

instance Core.AWSRequest UpdateTrafficPolicyComment where
  type
    AWSResponse UpdateTrafficPolicyComment =
      UpdateTrafficPolicyCommentResponse
  request :: (Service -> Service)
-> UpdateTrafficPolicyComment -> Request UpdateTrafficPolicyComment
request Service -> Service
overrides =
    forall a. (ToRequest a, ToElement a) => Service -> a -> Request a
Request.postXML (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateTrafficPolicyComment
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateTrafficPolicyComment)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXML
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Int -> TrafficPolicy -> UpdateTrafficPolicyCommentResponse
UpdateTrafficPolicyCommentResponse'
            forall (f :: * -> *) a b. Functor 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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String a
Data..@ Text
"TrafficPolicy")
      )

instance Prelude.Hashable UpdateTrafficPolicyComment where
  hashWithSalt :: Int -> UpdateTrafficPolicyComment -> Int
hashWithSalt Int
_salt UpdateTrafficPolicyComment' {Natural
Text
comment :: Text
version :: Natural
id :: Text
$sel:comment:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Text
$sel:version:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Natural
$sel:id:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
id
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Natural
version
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
comment

instance Prelude.NFData UpdateTrafficPolicyComment where
  rnf :: UpdateTrafficPolicyComment -> ()
rnf UpdateTrafficPolicyComment' {Natural
Text
comment :: Text
version :: Natural
id :: Text
$sel:comment:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Text
$sel:version:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Natural
$sel:id:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
id
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Natural
version
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
comment

instance Data.ToElement UpdateTrafficPolicyComment where
  toElement :: UpdateTrafficPolicyComment -> Element
toElement =
    forall a. ToXML a => Name -> a -> Element
Data.mkElement
      Name
"{https://route53.amazonaws.com/doc/2013-04-01/}UpdateTrafficPolicyCommentRequest"

instance Data.ToHeaders UpdateTrafficPolicyComment where
  toHeaders :: UpdateTrafficPolicyComment -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath UpdateTrafficPolicyComment where
  toPath :: UpdateTrafficPolicyComment -> ByteString
toPath UpdateTrafficPolicyComment' {Natural
Text
comment :: Text
version :: Natural
id :: Text
$sel:comment:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Text
$sel:version:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Natural
$sel:id:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/2013-04-01/trafficpolicy/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
id,
        ByteString
"/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Natural
version
      ]

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

instance Data.ToXML UpdateTrafficPolicyComment where
  toXML :: UpdateTrafficPolicyComment -> XML
toXML UpdateTrafficPolicyComment' {Natural
Text
comment :: Text
version :: Natural
id :: Text
$sel:comment:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Text
$sel:version:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Natural
$sel:id:UpdateTrafficPolicyComment' :: UpdateTrafficPolicyComment -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat [Name
"Comment" forall a. ToXML a => Name -> a -> XML
Data.@= Text
comment]

-- | A complex type that contains the response information for the traffic
-- policy.
--
-- /See:/ 'newUpdateTrafficPolicyCommentResponse' smart constructor.
data UpdateTrafficPolicyCommentResponse = UpdateTrafficPolicyCommentResponse'
  { -- | The response's http status code.
    UpdateTrafficPolicyCommentResponse -> Int
httpStatus :: Prelude.Int,
    -- | A complex type that contains settings for the specified traffic policy.
    UpdateTrafficPolicyCommentResponse -> TrafficPolicy
trafficPolicy :: TrafficPolicy
  }
  deriving (UpdateTrafficPolicyCommentResponse
-> UpdateTrafficPolicyCommentResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateTrafficPolicyCommentResponse
-> UpdateTrafficPolicyCommentResponse -> Bool
$c/= :: UpdateTrafficPolicyCommentResponse
-> UpdateTrafficPolicyCommentResponse -> Bool
== :: UpdateTrafficPolicyCommentResponse
-> UpdateTrafficPolicyCommentResponse -> Bool
$c== :: UpdateTrafficPolicyCommentResponse
-> UpdateTrafficPolicyCommentResponse -> Bool
Prelude.Eq, ReadPrec [UpdateTrafficPolicyCommentResponse]
ReadPrec UpdateTrafficPolicyCommentResponse
Int -> ReadS UpdateTrafficPolicyCommentResponse
ReadS [UpdateTrafficPolicyCommentResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateTrafficPolicyCommentResponse]
$creadListPrec :: ReadPrec [UpdateTrafficPolicyCommentResponse]
readPrec :: ReadPrec UpdateTrafficPolicyCommentResponse
$creadPrec :: ReadPrec UpdateTrafficPolicyCommentResponse
readList :: ReadS [UpdateTrafficPolicyCommentResponse]
$creadList :: ReadS [UpdateTrafficPolicyCommentResponse]
readsPrec :: Int -> ReadS UpdateTrafficPolicyCommentResponse
$creadsPrec :: Int -> ReadS UpdateTrafficPolicyCommentResponse
Prelude.Read, Int -> UpdateTrafficPolicyCommentResponse -> ShowS
[UpdateTrafficPolicyCommentResponse] -> ShowS
UpdateTrafficPolicyCommentResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateTrafficPolicyCommentResponse] -> ShowS
$cshowList :: [UpdateTrafficPolicyCommentResponse] -> ShowS
show :: UpdateTrafficPolicyCommentResponse -> String
$cshow :: UpdateTrafficPolicyCommentResponse -> String
showsPrec :: Int -> UpdateTrafficPolicyCommentResponse -> ShowS
$cshowsPrec :: Int -> UpdateTrafficPolicyCommentResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateTrafficPolicyCommentResponse x
-> UpdateTrafficPolicyCommentResponse
forall x.
UpdateTrafficPolicyCommentResponse
-> Rep UpdateTrafficPolicyCommentResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateTrafficPolicyCommentResponse x
-> UpdateTrafficPolicyCommentResponse
$cfrom :: forall x.
UpdateTrafficPolicyCommentResponse
-> Rep UpdateTrafficPolicyCommentResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateTrafficPolicyCommentResponse' 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:
--
-- 'httpStatus', 'updateTrafficPolicyCommentResponse_httpStatus' - The response's http status code.
--
-- 'trafficPolicy', 'updateTrafficPolicyCommentResponse_trafficPolicy' - A complex type that contains settings for the specified traffic policy.
newUpdateTrafficPolicyCommentResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'trafficPolicy'
  TrafficPolicy ->
  UpdateTrafficPolicyCommentResponse
newUpdateTrafficPolicyCommentResponse :: Int -> TrafficPolicy -> UpdateTrafficPolicyCommentResponse
newUpdateTrafficPolicyCommentResponse
  Int
pHttpStatus_
  TrafficPolicy
pTrafficPolicy_ =
    UpdateTrafficPolicyCommentResponse'
      { $sel:httpStatus:UpdateTrafficPolicyCommentResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:trafficPolicy:UpdateTrafficPolicyCommentResponse' :: TrafficPolicy
trafficPolicy = TrafficPolicy
pTrafficPolicy_
      }

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

-- | A complex type that contains settings for the specified traffic policy.
updateTrafficPolicyCommentResponse_trafficPolicy :: Lens.Lens' UpdateTrafficPolicyCommentResponse TrafficPolicy
updateTrafficPolicyCommentResponse_trafficPolicy :: Lens' UpdateTrafficPolicyCommentResponse TrafficPolicy
updateTrafficPolicyCommentResponse_trafficPolicy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateTrafficPolicyCommentResponse' {TrafficPolicy
trafficPolicy :: TrafficPolicy
$sel:trafficPolicy:UpdateTrafficPolicyCommentResponse' :: UpdateTrafficPolicyCommentResponse -> TrafficPolicy
trafficPolicy} -> TrafficPolicy
trafficPolicy) (\s :: UpdateTrafficPolicyCommentResponse
s@UpdateTrafficPolicyCommentResponse' {} TrafficPolicy
a -> UpdateTrafficPolicyCommentResponse
s {$sel:trafficPolicy:UpdateTrafficPolicyCommentResponse' :: TrafficPolicy
trafficPolicy = TrafficPolicy
a} :: UpdateTrafficPolicyCommentResponse)

instance
  Prelude.NFData
    UpdateTrafficPolicyCommentResponse
  where
  rnf :: UpdateTrafficPolicyCommentResponse -> ()
rnf UpdateTrafficPolicyCommentResponse' {Int
TrafficPolicy
trafficPolicy :: TrafficPolicy
httpStatus :: Int
$sel:trafficPolicy:UpdateTrafficPolicyCommentResponse' :: UpdateTrafficPolicyCommentResponse -> TrafficPolicy
$sel:httpStatus:UpdateTrafficPolicyCommentResponse' :: UpdateTrafficPolicyCommentResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf TrafficPolicy
trafficPolicy