{-# 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.ECS.UpdateCapacityProvider
-- 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 parameters for a capacity provider.
module Amazonka.ECS.UpdateCapacityProvider
  ( -- * Creating a Request
    UpdateCapacityProvider (..),
    newUpdateCapacityProvider,

    -- * Request Lenses
    updateCapacityProvider_name,
    updateCapacityProvider_autoScalingGroupProvider,

    -- * Destructuring the Response
    UpdateCapacityProviderResponse (..),
    newUpdateCapacityProviderResponse,

    -- * Response Lenses
    updateCapacityProviderResponse_capacityProvider,
    updateCapacityProviderResponse_httpStatus,
  )
where

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

-- | /See:/ 'newUpdateCapacityProvider' smart constructor.
data UpdateCapacityProvider = UpdateCapacityProvider'
  { -- | The name of the capacity provider to update.
    UpdateCapacityProvider -> Text
name :: Prelude.Text,
    -- | An object that represent the parameters to update for the Auto Scaling
    -- group capacity provider.
    UpdateCapacityProvider -> AutoScalingGroupProviderUpdate
autoScalingGroupProvider :: AutoScalingGroupProviderUpdate
  }
  deriving (UpdateCapacityProvider -> UpdateCapacityProvider -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateCapacityProvider -> UpdateCapacityProvider -> Bool
$c/= :: UpdateCapacityProvider -> UpdateCapacityProvider -> Bool
== :: UpdateCapacityProvider -> UpdateCapacityProvider -> Bool
$c== :: UpdateCapacityProvider -> UpdateCapacityProvider -> Bool
Prelude.Eq, ReadPrec [UpdateCapacityProvider]
ReadPrec UpdateCapacityProvider
Int -> ReadS UpdateCapacityProvider
ReadS [UpdateCapacityProvider]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateCapacityProvider]
$creadListPrec :: ReadPrec [UpdateCapacityProvider]
readPrec :: ReadPrec UpdateCapacityProvider
$creadPrec :: ReadPrec UpdateCapacityProvider
readList :: ReadS [UpdateCapacityProvider]
$creadList :: ReadS [UpdateCapacityProvider]
readsPrec :: Int -> ReadS UpdateCapacityProvider
$creadsPrec :: Int -> ReadS UpdateCapacityProvider
Prelude.Read, Int -> UpdateCapacityProvider -> ShowS
[UpdateCapacityProvider] -> ShowS
UpdateCapacityProvider -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateCapacityProvider] -> ShowS
$cshowList :: [UpdateCapacityProvider] -> ShowS
show :: UpdateCapacityProvider -> String
$cshow :: UpdateCapacityProvider -> String
showsPrec :: Int -> UpdateCapacityProvider -> ShowS
$cshowsPrec :: Int -> UpdateCapacityProvider -> ShowS
Prelude.Show, forall x. Rep UpdateCapacityProvider x -> UpdateCapacityProvider
forall x. UpdateCapacityProvider -> Rep UpdateCapacityProvider x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateCapacityProvider x -> UpdateCapacityProvider
$cfrom :: forall x. UpdateCapacityProvider -> Rep UpdateCapacityProvider x
Prelude.Generic)

-- |
-- Create a value of 'UpdateCapacityProvider' 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:
--
-- 'name', 'updateCapacityProvider_name' - The name of the capacity provider to update.
--
-- 'autoScalingGroupProvider', 'updateCapacityProvider_autoScalingGroupProvider' - An object that represent the parameters to update for the Auto Scaling
-- group capacity provider.
newUpdateCapacityProvider ::
  -- | 'name'
  Prelude.Text ->
  -- | 'autoScalingGroupProvider'
  AutoScalingGroupProviderUpdate ->
  UpdateCapacityProvider
newUpdateCapacityProvider :: Text -> AutoScalingGroupProviderUpdate -> UpdateCapacityProvider
newUpdateCapacityProvider
  Text
pName_
  AutoScalingGroupProviderUpdate
pAutoScalingGroupProvider_ =
    UpdateCapacityProvider'
      { $sel:name:UpdateCapacityProvider' :: Text
name = Text
pName_,
        $sel:autoScalingGroupProvider:UpdateCapacityProvider' :: AutoScalingGroupProviderUpdate
autoScalingGroupProvider =
          AutoScalingGroupProviderUpdate
pAutoScalingGroupProvider_
      }

-- | The name of the capacity provider to update.
updateCapacityProvider_name :: Lens.Lens' UpdateCapacityProvider Prelude.Text
updateCapacityProvider_name :: Lens' UpdateCapacityProvider Text
updateCapacityProvider_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateCapacityProvider' {Text
name :: Text
$sel:name:UpdateCapacityProvider' :: UpdateCapacityProvider -> Text
name} -> Text
name) (\s :: UpdateCapacityProvider
s@UpdateCapacityProvider' {} Text
a -> UpdateCapacityProvider
s {$sel:name:UpdateCapacityProvider' :: Text
name = Text
a} :: UpdateCapacityProvider)

-- | An object that represent the parameters to update for the Auto Scaling
-- group capacity provider.
updateCapacityProvider_autoScalingGroupProvider :: Lens.Lens' UpdateCapacityProvider AutoScalingGroupProviderUpdate
updateCapacityProvider_autoScalingGroupProvider :: Lens' UpdateCapacityProvider AutoScalingGroupProviderUpdate
updateCapacityProvider_autoScalingGroupProvider = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateCapacityProvider' {AutoScalingGroupProviderUpdate
autoScalingGroupProvider :: AutoScalingGroupProviderUpdate
$sel:autoScalingGroupProvider:UpdateCapacityProvider' :: UpdateCapacityProvider -> AutoScalingGroupProviderUpdate
autoScalingGroupProvider} -> AutoScalingGroupProviderUpdate
autoScalingGroupProvider) (\s :: UpdateCapacityProvider
s@UpdateCapacityProvider' {} AutoScalingGroupProviderUpdate
a -> UpdateCapacityProvider
s {$sel:autoScalingGroupProvider:UpdateCapacityProvider' :: AutoScalingGroupProviderUpdate
autoScalingGroupProvider = AutoScalingGroupProviderUpdate
a} :: UpdateCapacityProvider)

instance Core.AWSRequest UpdateCapacityProvider where
  type
    AWSResponse UpdateCapacityProvider =
      UpdateCapacityProviderResponse
  request :: (Service -> Service)
-> UpdateCapacityProvider -> Request UpdateCapacityProvider
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 UpdateCapacityProvider
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateCapacityProvider)))
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 CapacityProvider -> Int -> UpdateCapacityProviderResponse
UpdateCapacityProviderResponse'
            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
"capacityProvider")
            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 UpdateCapacityProvider where
  hashWithSalt :: Int -> UpdateCapacityProvider -> Int
hashWithSalt Int
_salt UpdateCapacityProvider' {Text
AutoScalingGroupProviderUpdate
autoScalingGroupProvider :: AutoScalingGroupProviderUpdate
name :: Text
$sel:autoScalingGroupProvider:UpdateCapacityProvider' :: UpdateCapacityProvider -> AutoScalingGroupProviderUpdate
$sel:name:UpdateCapacityProvider' :: UpdateCapacityProvider -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AutoScalingGroupProviderUpdate
autoScalingGroupProvider

instance Prelude.NFData UpdateCapacityProvider where
  rnf :: UpdateCapacityProvider -> ()
rnf UpdateCapacityProvider' {Text
AutoScalingGroupProviderUpdate
autoScalingGroupProvider :: AutoScalingGroupProviderUpdate
name :: Text
$sel:autoScalingGroupProvider:UpdateCapacityProvider' :: UpdateCapacityProvider -> AutoScalingGroupProviderUpdate
$sel:name:UpdateCapacityProvider' :: UpdateCapacityProvider -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AutoScalingGroupProviderUpdate
autoScalingGroupProvider

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

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

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

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

-- |
-- Create a value of 'UpdateCapacityProviderResponse' 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:
--
-- 'capacityProvider', 'updateCapacityProviderResponse_capacityProvider' - Details about the capacity provider.
--
-- 'httpStatus', 'updateCapacityProviderResponse_httpStatus' - The response's http status code.
newUpdateCapacityProviderResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateCapacityProviderResponse
newUpdateCapacityProviderResponse :: Int -> UpdateCapacityProviderResponse
newUpdateCapacityProviderResponse Int
pHttpStatus_ =
  UpdateCapacityProviderResponse'
    { $sel:capacityProvider:UpdateCapacityProviderResponse' :: Maybe CapacityProvider
capacityProvider =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:UpdateCapacityProviderResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Details about the capacity provider.
updateCapacityProviderResponse_capacityProvider :: Lens.Lens' UpdateCapacityProviderResponse (Prelude.Maybe CapacityProvider)
updateCapacityProviderResponse_capacityProvider :: Lens' UpdateCapacityProviderResponse (Maybe CapacityProvider)
updateCapacityProviderResponse_capacityProvider = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateCapacityProviderResponse' {Maybe CapacityProvider
capacityProvider :: Maybe CapacityProvider
$sel:capacityProvider:UpdateCapacityProviderResponse' :: UpdateCapacityProviderResponse -> Maybe CapacityProvider
capacityProvider} -> Maybe CapacityProvider
capacityProvider) (\s :: UpdateCapacityProviderResponse
s@UpdateCapacityProviderResponse' {} Maybe CapacityProvider
a -> UpdateCapacityProviderResponse
s {$sel:capacityProvider:UpdateCapacityProviderResponse' :: Maybe CapacityProvider
capacityProvider = Maybe CapacityProvider
a} :: UpdateCapacityProviderResponse)

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

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