{-# 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.ELBV2.ModifyLoadBalancerAttributes
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Modifies the specified attributes of the specified Application Load
-- Balancer, Network Load Balancer, or Gateway Load Balancer.
--
-- If any of the specified attributes can\'t be modified as requested, the
-- call fails. Any existing attributes that you do not modify retain their
-- current values.
module Amazonka.ELBV2.ModifyLoadBalancerAttributes
  ( -- * Creating a Request
    ModifyLoadBalancerAttributes (..),
    newModifyLoadBalancerAttributes,

    -- * Request Lenses
    modifyLoadBalancerAttributes_loadBalancerArn,
    modifyLoadBalancerAttributes_attributes,

    -- * Destructuring the Response
    ModifyLoadBalancerAttributesResponse (..),
    newModifyLoadBalancerAttributesResponse,

    -- * Response Lenses
    modifyLoadBalancerAttributesResponse_attributes,
    modifyLoadBalancerAttributesResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.ELBV2.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newModifyLoadBalancerAttributes' smart constructor.
data ModifyLoadBalancerAttributes = ModifyLoadBalancerAttributes'
  { -- | The Amazon Resource Name (ARN) of the load balancer.
    ModifyLoadBalancerAttributes -> Text
loadBalancerArn :: Prelude.Text,
    -- | The load balancer attributes.
    ModifyLoadBalancerAttributes -> [LoadBalancerAttribute]
attributes :: [LoadBalancerAttribute]
  }
  deriving (ModifyLoadBalancerAttributes
-> ModifyLoadBalancerAttributes -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ModifyLoadBalancerAttributes
-> ModifyLoadBalancerAttributes -> Bool
$c/= :: ModifyLoadBalancerAttributes
-> ModifyLoadBalancerAttributes -> Bool
== :: ModifyLoadBalancerAttributes
-> ModifyLoadBalancerAttributes -> Bool
$c== :: ModifyLoadBalancerAttributes
-> ModifyLoadBalancerAttributes -> Bool
Prelude.Eq, ReadPrec [ModifyLoadBalancerAttributes]
ReadPrec ModifyLoadBalancerAttributes
Int -> ReadS ModifyLoadBalancerAttributes
ReadS [ModifyLoadBalancerAttributes]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ModifyLoadBalancerAttributes]
$creadListPrec :: ReadPrec [ModifyLoadBalancerAttributes]
readPrec :: ReadPrec ModifyLoadBalancerAttributes
$creadPrec :: ReadPrec ModifyLoadBalancerAttributes
readList :: ReadS [ModifyLoadBalancerAttributes]
$creadList :: ReadS [ModifyLoadBalancerAttributes]
readsPrec :: Int -> ReadS ModifyLoadBalancerAttributes
$creadsPrec :: Int -> ReadS ModifyLoadBalancerAttributes
Prelude.Read, Int -> ModifyLoadBalancerAttributes -> ShowS
[ModifyLoadBalancerAttributes] -> ShowS
ModifyLoadBalancerAttributes -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ModifyLoadBalancerAttributes] -> ShowS
$cshowList :: [ModifyLoadBalancerAttributes] -> ShowS
show :: ModifyLoadBalancerAttributes -> String
$cshow :: ModifyLoadBalancerAttributes -> String
showsPrec :: Int -> ModifyLoadBalancerAttributes -> ShowS
$cshowsPrec :: Int -> ModifyLoadBalancerAttributes -> ShowS
Prelude.Show, forall x.
Rep ModifyLoadBalancerAttributes x -> ModifyLoadBalancerAttributes
forall x.
ModifyLoadBalancerAttributes -> Rep ModifyLoadBalancerAttributes x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ModifyLoadBalancerAttributes x -> ModifyLoadBalancerAttributes
$cfrom :: forall x.
ModifyLoadBalancerAttributes -> Rep ModifyLoadBalancerAttributes x
Prelude.Generic)

-- |
-- Create a value of 'ModifyLoadBalancerAttributes' 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:
--
-- 'loadBalancerArn', 'modifyLoadBalancerAttributes_loadBalancerArn' - The Amazon Resource Name (ARN) of the load balancer.
--
-- 'attributes', 'modifyLoadBalancerAttributes_attributes' - The load balancer attributes.
newModifyLoadBalancerAttributes ::
  -- | 'loadBalancerArn'
  Prelude.Text ->
  ModifyLoadBalancerAttributes
newModifyLoadBalancerAttributes :: Text -> ModifyLoadBalancerAttributes
newModifyLoadBalancerAttributes Text
pLoadBalancerArn_ =
  ModifyLoadBalancerAttributes'
    { $sel:loadBalancerArn:ModifyLoadBalancerAttributes' :: Text
loadBalancerArn =
        Text
pLoadBalancerArn_,
      $sel:attributes:ModifyLoadBalancerAttributes' :: [LoadBalancerAttribute]
attributes = forall a. Monoid a => a
Prelude.mempty
    }

-- | The Amazon Resource Name (ARN) of the load balancer.
modifyLoadBalancerAttributes_loadBalancerArn :: Lens.Lens' ModifyLoadBalancerAttributes Prelude.Text
modifyLoadBalancerAttributes_loadBalancerArn :: Lens' ModifyLoadBalancerAttributes Text
modifyLoadBalancerAttributes_loadBalancerArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModifyLoadBalancerAttributes' {Text
loadBalancerArn :: Text
$sel:loadBalancerArn:ModifyLoadBalancerAttributes' :: ModifyLoadBalancerAttributes -> Text
loadBalancerArn} -> Text
loadBalancerArn) (\s :: ModifyLoadBalancerAttributes
s@ModifyLoadBalancerAttributes' {} Text
a -> ModifyLoadBalancerAttributes
s {$sel:loadBalancerArn:ModifyLoadBalancerAttributes' :: Text
loadBalancerArn = Text
a} :: ModifyLoadBalancerAttributes)

-- | The load balancer attributes.
modifyLoadBalancerAttributes_attributes :: Lens.Lens' ModifyLoadBalancerAttributes [LoadBalancerAttribute]
modifyLoadBalancerAttributes_attributes :: Lens' ModifyLoadBalancerAttributes [LoadBalancerAttribute]
modifyLoadBalancerAttributes_attributes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModifyLoadBalancerAttributes' {[LoadBalancerAttribute]
attributes :: [LoadBalancerAttribute]
$sel:attributes:ModifyLoadBalancerAttributes' :: ModifyLoadBalancerAttributes -> [LoadBalancerAttribute]
attributes} -> [LoadBalancerAttribute]
attributes) (\s :: ModifyLoadBalancerAttributes
s@ModifyLoadBalancerAttributes' {} [LoadBalancerAttribute]
a -> ModifyLoadBalancerAttributes
s {$sel:attributes:ModifyLoadBalancerAttributes' :: [LoadBalancerAttribute]
attributes = [LoadBalancerAttribute]
a} :: ModifyLoadBalancerAttributes) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Core.AWSRequest ModifyLoadBalancerAttributes where
  type
    AWSResponse ModifyLoadBalancerAttributes =
      ModifyLoadBalancerAttributesResponse
  request :: (Service -> Service)
-> ModifyLoadBalancerAttributes
-> Request ModifyLoadBalancerAttributes
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy ModifyLoadBalancerAttributes
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse ModifyLoadBalancerAttributes)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXMLWrapper
      Text
"ModifyLoadBalancerAttributesResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe [LoadBalancerAttribute]
-> Int -> ModifyLoadBalancerAttributesResponse
ModifyLoadBalancerAttributesResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ( [Node]
x
                            forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Attributes"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                            forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"member")
                        )
            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
    ModifyLoadBalancerAttributes
  where
  hashWithSalt :: Int -> ModifyLoadBalancerAttributes -> Int
hashWithSalt Int
_salt ModifyLoadBalancerAttributes' {[LoadBalancerAttribute]
Text
attributes :: [LoadBalancerAttribute]
loadBalancerArn :: Text
$sel:attributes:ModifyLoadBalancerAttributes' :: ModifyLoadBalancerAttributes -> [LoadBalancerAttribute]
$sel:loadBalancerArn:ModifyLoadBalancerAttributes' :: ModifyLoadBalancerAttributes -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
loadBalancerArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` [LoadBalancerAttribute]
attributes

instance Prelude.NFData ModifyLoadBalancerAttributes where
  rnf :: ModifyLoadBalancerAttributes -> ()
rnf ModifyLoadBalancerAttributes' {[LoadBalancerAttribute]
Text
attributes :: [LoadBalancerAttribute]
loadBalancerArn :: Text
$sel:attributes:ModifyLoadBalancerAttributes' :: ModifyLoadBalancerAttributes -> [LoadBalancerAttribute]
$sel:loadBalancerArn:ModifyLoadBalancerAttributes' :: ModifyLoadBalancerAttributes -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
loadBalancerArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf [LoadBalancerAttribute]
attributes

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

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

instance Data.ToQuery ModifyLoadBalancerAttributes where
  toQuery :: ModifyLoadBalancerAttributes -> QueryString
toQuery ModifyLoadBalancerAttributes' {[LoadBalancerAttribute]
Text
attributes :: [LoadBalancerAttribute]
loadBalancerArn :: Text
$sel:attributes:ModifyLoadBalancerAttributes' :: ModifyLoadBalancerAttributes -> [LoadBalancerAttribute]
$sel:loadBalancerArn:ModifyLoadBalancerAttributes' :: ModifyLoadBalancerAttributes -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"ModifyLoadBalancerAttributes" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2015-12-01" :: Prelude.ByteString),
        ByteString
"LoadBalancerArn" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
loadBalancerArn,
        ByteString
"Attributes"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"member" [LoadBalancerAttribute]
attributes
      ]

-- | /See:/ 'newModifyLoadBalancerAttributesResponse' smart constructor.
data ModifyLoadBalancerAttributesResponse = ModifyLoadBalancerAttributesResponse'
  { -- | Information about the load balancer attributes.
    ModifyLoadBalancerAttributesResponse
-> Maybe [LoadBalancerAttribute]
attributes :: Prelude.Maybe [LoadBalancerAttribute],
    -- | The response's http status code.
    ModifyLoadBalancerAttributesResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (ModifyLoadBalancerAttributesResponse
-> ModifyLoadBalancerAttributesResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ModifyLoadBalancerAttributesResponse
-> ModifyLoadBalancerAttributesResponse -> Bool
$c/= :: ModifyLoadBalancerAttributesResponse
-> ModifyLoadBalancerAttributesResponse -> Bool
== :: ModifyLoadBalancerAttributesResponse
-> ModifyLoadBalancerAttributesResponse -> Bool
$c== :: ModifyLoadBalancerAttributesResponse
-> ModifyLoadBalancerAttributesResponse -> Bool
Prelude.Eq, ReadPrec [ModifyLoadBalancerAttributesResponse]
ReadPrec ModifyLoadBalancerAttributesResponse
Int -> ReadS ModifyLoadBalancerAttributesResponse
ReadS [ModifyLoadBalancerAttributesResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ModifyLoadBalancerAttributesResponse]
$creadListPrec :: ReadPrec [ModifyLoadBalancerAttributesResponse]
readPrec :: ReadPrec ModifyLoadBalancerAttributesResponse
$creadPrec :: ReadPrec ModifyLoadBalancerAttributesResponse
readList :: ReadS [ModifyLoadBalancerAttributesResponse]
$creadList :: ReadS [ModifyLoadBalancerAttributesResponse]
readsPrec :: Int -> ReadS ModifyLoadBalancerAttributesResponse
$creadsPrec :: Int -> ReadS ModifyLoadBalancerAttributesResponse
Prelude.Read, Int -> ModifyLoadBalancerAttributesResponse -> ShowS
[ModifyLoadBalancerAttributesResponse] -> ShowS
ModifyLoadBalancerAttributesResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ModifyLoadBalancerAttributesResponse] -> ShowS
$cshowList :: [ModifyLoadBalancerAttributesResponse] -> ShowS
show :: ModifyLoadBalancerAttributesResponse -> String
$cshow :: ModifyLoadBalancerAttributesResponse -> String
showsPrec :: Int -> ModifyLoadBalancerAttributesResponse -> ShowS
$cshowsPrec :: Int -> ModifyLoadBalancerAttributesResponse -> ShowS
Prelude.Show, forall x.
Rep ModifyLoadBalancerAttributesResponse x
-> ModifyLoadBalancerAttributesResponse
forall x.
ModifyLoadBalancerAttributesResponse
-> Rep ModifyLoadBalancerAttributesResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ModifyLoadBalancerAttributesResponse x
-> ModifyLoadBalancerAttributesResponse
$cfrom :: forall x.
ModifyLoadBalancerAttributesResponse
-> Rep ModifyLoadBalancerAttributesResponse x
Prelude.Generic)

-- |
-- Create a value of 'ModifyLoadBalancerAttributesResponse' 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:
--
-- 'attributes', 'modifyLoadBalancerAttributesResponse_attributes' - Information about the load balancer attributes.
--
-- 'httpStatus', 'modifyLoadBalancerAttributesResponse_httpStatus' - The response's http status code.
newModifyLoadBalancerAttributesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  ModifyLoadBalancerAttributesResponse
newModifyLoadBalancerAttributesResponse :: Int -> ModifyLoadBalancerAttributesResponse
newModifyLoadBalancerAttributesResponse Int
pHttpStatus_ =
  ModifyLoadBalancerAttributesResponse'
    { $sel:attributes:ModifyLoadBalancerAttributesResponse' :: Maybe [LoadBalancerAttribute]
attributes =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:ModifyLoadBalancerAttributesResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Information about the load balancer attributes.
modifyLoadBalancerAttributesResponse_attributes :: Lens.Lens' ModifyLoadBalancerAttributesResponse (Prelude.Maybe [LoadBalancerAttribute])
modifyLoadBalancerAttributesResponse_attributes :: Lens'
  ModifyLoadBalancerAttributesResponse
  (Maybe [LoadBalancerAttribute])
modifyLoadBalancerAttributesResponse_attributes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModifyLoadBalancerAttributesResponse' {Maybe [LoadBalancerAttribute]
attributes :: Maybe [LoadBalancerAttribute]
$sel:attributes:ModifyLoadBalancerAttributesResponse' :: ModifyLoadBalancerAttributesResponse
-> Maybe [LoadBalancerAttribute]
attributes} -> Maybe [LoadBalancerAttribute]
attributes) (\s :: ModifyLoadBalancerAttributesResponse
s@ModifyLoadBalancerAttributesResponse' {} Maybe [LoadBalancerAttribute]
a -> ModifyLoadBalancerAttributesResponse
s {$sel:attributes:ModifyLoadBalancerAttributesResponse' :: Maybe [LoadBalancerAttribute]
attributes = Maybe [LoadBalancerAttribute]
a} :: ModifyLoadBalancerAttributesResponse) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

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

instance
  Prelude.NFData
    ModifyLoadBalancerAttributesResponse
  where
  rnf :: ModifyLoadBalancerAttributesResponse -> ()
rnf ModifyLoadBalancerAttributesResponse' {Int
Maybe [LoadBalancerAttribute]
httpStatus :: Int
attributes :: Maybe [LoadBalancerAttribute]
$sel:httpStatus:ModifyLoadBalancerAttributesResponse' :: ModifyLoadBalancerAttributesResponse -> Int
$sel:attributes:ModifyLoadBalancerAttributesResponse' :: ModifyLoadBalancerAttributesResponse
-> Maybe [LoadBalancerAttribute]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [LoadBalancerAttribute]
attributes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus