{-# 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.DeleteCapacityProvider
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes the specified capacity provider.
--
-- The @FARGATE@ and @FARGATE_SPOT@ capacity providers are reserved and
-- can\'t be deleted. You can disassociate them from a cluster using either
-- the PutClusterCapacityProviders API or by deleting the cluster.
--
-- Prior to a capacity provider being deleted, the capacity provider must
-- be removed from the capacity provider strategy from all services. The
-- UpdateService API can be used to remove a capacity provider from a
-- service\'s capacity provider strategy. When updating a service, the
-- @forceNewDeployment@ option can be used to ensure that any tasks using
-- the Amazon EC2 instance capacity provided by the capacity provider are
-- transitioned to use the capacity from the remaining capacity providers.
-- Only capacity providers that aren\'t associated with a cluster can be
-- deleted. To remove a capacity provider from a cluster, you can either
-- use PutClusterCapacityProviders or delete the cluster.
module Amazonka.ECS.DeleteCapacityProvider
  ( -- * Creating a Request
    DeleteCapacityProvider (..),
    newDeleteCapacityProvider,

    -- * Request Lenses
    deleteCapacityProvider_capacityProvider,

    -- * Destructuring the Response
    DeleteCapacityProviderResponse (..),
    newDeleteCapacityProviderResponse,

    -- * Response Lenses
    deleteCapacityProviderResponse_capacityProvider,
    deleteCapacityProviderResponse_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:/ 'newDeleteCapacityProvider' smart constructor.
data DeleteCapacityProvider = DeleteCapacityProvider'
  { -- | The short name or full Amazon Resource Name (ARN) of the capacity
    -- provider to delete.
    DeleteCapacityProvider -> Text
capacityProvider :: Prelude.Text
  }
  deriving (DeleteCapacityProvider -> DeleteCapacityProvider -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteCapacityProvider -> DeleteCapacityProvider -> Bool
$c/= :: DeleteCapacityProvider -> DeleteCapacityProvider -> Bool
== :: DeleteCapacityProvider -> DeleteCapacityProvider -> Bool
$c== :: DeleteCapacityProvider -> DeleteCapacityProvider -> Bool
Prelude.Eq, ReadPrec [DeleteCapacityProvider]
ReadPrec DeleteCapacityProvider
Int -> ReadS DeleteCapacityProvider
ReadS [DeleteCapacityProvider]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteCapacityProvider]
$creadListPrec :: ReadPrec [DeleteCapacityProvider]
readPrec :: ReadPrec DeleteCapacityProvider
$creadPrec :: ReadPrec DeleteCapacityProvider
readList :: ReadS [DeleteCapacityProvider]
$creadList :: ReadS [DeleteCapacityProvider]
readsPrec :: Int -> ReadS DeleteCapacityProvider
$creadsPrec :: Int -> ReadS DeleteCapacityProvider
Prelude.Read, Int -> DeleteCapacityProvider -> ShowS
[DeleteCapacityProvider] -> ShowS
DeleteCapacityProvider -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteCapacityProvider] -> ShowS
$cshowList :: [DeleteCapacityProvider] -> ShowS
show :: DeleteCapacityProvider -> String
$cshow :: DeleteCapacityProvider -> String
showsPrec :: Int -> DeleteCapacityProvider -> ShowS
$cshowsPrec :: Int -> DeleteCapacityProvider -> ShowS
Prelude.Show, forall x. Rep DeleteCapacityProvider x -> DeleteCapacityProvider
forall x. DeleteCapacityProvider -> Rep DeleteCapacityProvider x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteCapacityProvider x -> DeleteCapacityProvider
$cfrom :: forall x. DeleteCapacityProvider -> Rep DeleteCapacityProvider x
Prelude.Generic)

-- |
-- Create a value of 'DeleteCapacityProvider' 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', 'deleteCapacityProvider_capacityProvider' - The short name or full Amazon Resource Name (ARN) of the capacity
-- provider to delete.
newDeleteCapacityProvider ::
  -- | 'capacityProvider'
  Prelude.Text ->
  DeleteCapacityProvider
newDeleteCapacityProvider :: Text -> DeleteCapacityProvider
newDeleteCapacityProvider Text
pCapacityProvider_ =
  DeleteCapacityProvider'
    { $sel:capacityProvider:DeleteCapacityProvider' :: Text
capacityProvider =
        Text
pCapacityProvider_
    }

-- | The short name or full Amazon Resource Name (ARN) of the capacity
-- provider to delete.
deleteCapacityProvider_capacityProvider :: Lens.Lens' DeleteCapacityProvider Prelude.Text
deleteCapacityProvider_capacityProvider :: Lens' DeleteCapacityProvider Text
deleteCapacityProvider_capacityProvider = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteCapacityProvider' {Text
capacityProvider :: Text
$sel:capacityProvider:DeleteCapacityProvider' :: DeleteCapacityProvider -> Text
capacityProvider} -> Text
capacityProvider) (\s :: DeleteCapacityProvider
s@DeleteCapacityProvider' {} Text
a -> DeleteCapacityProvider
s {$sel:capacityProvider:DeleteCapacityProvider' :: Text
capacityProvider = Text
a} :: DeleteCapacityProvider)

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

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

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

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

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

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

-- |
-- Create a value of 'DeleteCapacityProviderResponse' 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', 'deleteCapacityProviderResponse_capacityProvider' - The details of the capacity provider.
--
-- 'httpStatus', 'deleteCapacityProviderResponse_httpStatus' - The response's http status code.
newDeleteCapacityProviderResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteCapacityProviderResponse
newDeleteCapacityProviderResponse :: Int -> DeleteCapacityProviderResponse
newDeleteCapacityProviderResponse Int
pHttpStatus_ =
  DeleteCapacityProviderResponse'
    { $sel:capacityProvider:DeleteCapacityProviderResponse' :: Maybe CapacityProvider
capacityProvider =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DeleteCapacityProviderResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The details of the capacity provider.
deleteCapacityProviderResponse_capacityProvider :: Lens.Lens' DeleteCapacityProviderResponse (Prelude.Maybe CapacityProvider)
deleteCapacityProviderResponse_capacityProvider :: Lens' DeleteCapacityProviderResponse (Maybe CapacityProvider)
deleteCapacityProviderResponse_capacityProvider = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteCapacityProviderResponse' {Maybe CapacityProvider
capacityProvider :: Maybe CapacityProvider
$sel:capacityProvider:DeleteCapacityProviderResponse' :: DeleteCapacityProviderResponse -> Maybe CapacityProvider
capacityProvider} -> Maybe CapacityProvider
capacityProvider) (\s :: DeleteCapacityProviderResponse
s@DeleteCapacityProviderResponse' {} Maybe CapacityProvider
a -> DeleteCapacityProviderResponse
s {$sel:capacityProvider:DeleteCapacityProviderResponse' :: Maybe CapacityProvider
capacityProvider = Maybe CapacityProvider
a} :: DeleteCapacityProviderResponse)

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

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