{-# 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.M2.DeleteApplicationFromEnvironment
-- 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 a specific application from the specific runtime environment
-- where it was previously deployed. You cannot delete a runtime
-- environment using DeleteEnvironment if any application has ever been
-- deployed to it. This API removes the association of the application with
-- the runtime environment so you can delete the environment smoothly.
module Amazonka.M2.DeleteApplicationFromEnvironment
  ( -- * Creating a Request
    DeleteApplicationFromEnvironment (..),
    newDeleteApplicationFromEnvironment,

    -- * Request Lenses
    deleteApplicationFromEnvironment_applicationId,
    deleteApplicationFromEnvironment_environmentId,

    -- * Destructuring the Response
    DeleteApplicationFromEnvironmentResponse (..),
    newDeleteApplicationFromEnvironmentResponse,

    -- * Response Lenses
    deleteApplicationFromEnvironmentResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDeleteApplicationFromEnvironment' smart constructor.
data DeleteApplicationFromEnvironment = DeleteApplicationFromEnvironment'
  { -- | The unique identifier of the application you want to delete.
    DeleteApplicationFromEnvironment -> Text
applicationId :: Prelude.Text,
    -- | The unique identifier of the runtime environment where the application
    -- was previously deployed.
    DeleteApplicationFromEnvironment -> Text
environmentId :: Prelude.Text
  }
  deriving (DeleteApplicationFromEnvironment
-> DeleteApplicationFromEnvironment -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteApplicationFromEnvironment
-> DeleteApplicationFromEnvironment -> Bool
$c/= :: DeleteApplicationFromEnvironment
-> DeleteApplicationFromEnvironment -> Bool
== :: DeleteApplicationFromEnvironment
-> DeleteApplicationFromEnvironment -> Bool
$c== :: DeleteApplicationFromEnvironment
-> DeleteApplicationFromEnvironment -> Bool
Prelude.Eq, ReadPrec [DeleteApplicationFromEnvironment]
ReadPrec DeleteApplicationFromEnvironment
Int -> ReadS DeleteApplicationFromEnvironment
ReadS [DeleteApplicationFromEnvironment]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteApplicationFromEnvironment]
$creadListPrec :: ReadPrec [DeleteApplicationFromEnvironment]
readPrec :: ReadPrec DeleteApplicationFromEnvironment
$creadPrec :: ReadPrec DeleteApplicationFromEnvironment
readList :: ReadS [DeleteApplicationFromEnvironment]
$creadList :: ReadS [DeleteApplicationFromEnvironment]
readsPrec :: Int -> ReadS DeleteApplicationFromEnvironment
$creadsPrec :: Int -> ReadS DeleteApplicationFromEnvironment
Prelude.Read, Int -> DeleteApplicationFromEnvironment -> ShowS
[DeleteApplicationFromEnvironment] -> ShowS
DeleteApplicationFromEnvironment -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteApplicationFromEnvironment] -> ShowS
$cshowList :: [DeleteApplicationFromEnvironment] -> ShowS
show :: DeleteApplicationFromEnvironment -> String
$cshow :: DeleteApplicationFromEnvironment -> String
showsPrec :: Int -> DeleteApplicationFromEnvironment -> ShowS
$cshowsPrec :: Int -> DeleteApplicationFromEnvironment -> ShowS
Prelude.Show, forall x.
Rep DeleteApplicationFromEnvironment x
-> DeleteApplicationFromEnvironment
forall x.
DeleteApplicationFromEnvironment
-> Rep DeleteApplicationFromEnvironment x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteApplicationFromEnvironment x
-> DeleteApplicationFromEnvironment
$cfrom :: forall x.
DeleteApplicationFromEnvironment
-> Rep DeleteApplicationFromEnvironment x
Prelude.Generic)

-- |
-- Create a value of 'DeleteApplicationFromEnvironment' 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:
--
-- 'applicationId', 'deleteApplicationFromEnvironment_applicationId' - The unique identifier of the application you want to delete.
--
-- 'environmentId', 'deleteApplicationFromEnvironment_environmentId' - The unique identifier of the runtime environment where the application
-- was previously deployed.
newDeleteApplicationFromEnvironment ::
  -- | 'applicationId'
  Prelude.Text ->
  -- | 'environmentId'
  Prelude.Text ->
  DeleteApplicationFromEnvironment
newDeleteApplicationFromEnvironment :: Text -> Text -> DeleteApplicationFromEnvironment
newDeleteApplicationFromEnvironment
  Text
pApplicationId_
  Text
pEnvironmentId_ =
    DeleteApplicationFromEnvironment'
      { $sel:applicationId:DeleteApplicationFromEnvironment' :: Text
applicationId =
          Text
pApplicationId_,
        $sel:environmentId:DeleteApplicationFromEnvironment' :: Text
environmentId = Text
pEnvironmentId_
      }

-- | The unique identifier of the application you want to delete.
deleteApplicationFromEnvironment_applicationId :: Lens.Lens' DeleteApplicationFromEnvironment Prelude.Text
deleteApplicationFromEnvironment_applicationId :: Lens' DeleteApplicationFromEnvironment Text
deleteApplicationFromEnvironment_applicationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteApplicationFromEnvironment' {Text
applicationId :: Text
$sel:applicationId:DeleteApplicationFromEnvironment' :: DeleteApplicationFromEnvironment -> Text
applicationId} -> Text
applicationId) (\s :: DeleteApplicationFromEnvironment
s@DeleteApplicationFromEnvironment' {} Text
a -> DeleteApplicationFromEnvironment
s {$sel:applicationId:DeleteApplicationFromEnvironment' :: Text
applicationId = Text
a} :: DeleteApplicationFromEnvironment)

-- | The unique identifier of the runtime environment where the application
-- was previously deployed.
deleteApplicationFromEnvironment_environmentId :: Lens.Lens' DeleteApplicationFromEnvironment Prelude.Text
deleteApplicationFromEnvironment_environmentId :: Lens' DeleteApplicationFromEnvironment Text
deleteApplicationFromEnvironment_environmentId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteApplicationFromEnvironment' {Text
environmentId :: Text
$sel:environmentId:DeleteApplicationFromEnvironment' :: DeleteApplicationFromEnvironment -> Text
environmentId} -> Text
environmentId) (\s :: DeleteApplicationFromEnvironment
s@DeleteApplicationFromEnvironment' {} Text
a -> DeleteApplicationFromEnvironment
s {$sel:environmentId:DeleteApplicationFromEnvironment' :: Text
environmentId = Text
a} :: DeleteApplicationFromEnvironment)

instance
  Core.AWSRequest
    DeleteApplicationFromEnvironment
  where
  type
    AWSResponse DeleteApplicationFromEnvironment =
      DeleteApplicationFromEnvironmentResponse
  request :: (Service -> Service)
-> DeleteApplicationFromEnvironment
-> Request DeleteApplicationFromEnvironment
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.delete (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DeleteApplicationFromEnvironment
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse DeleteApplicationFromEnvironment)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> DeleteApplicationFromEnvironmentResponse
DeleteApplicationFromEnvironmentResponse'
            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))
      )

instance
  Prelude.Hashable
    DeleteApplicationFromEnvironment
  where
  hashWithSalt :: Int -> DeleteApplicationFromEnvironment -> Int
hashWithSalt
    Int
_salt
    DeleteApplicationFromEnvironment' {Text
environmentId :: Text
applicationId :: Text
$sel:environmentId:DeleteApplicationFromEnvironment' :: DeleteApplicationFromEnvironment -> Text
$sel:applicationId:DeleteApplicationFromEnvironment' :: DeleteApplicationFromEnvironment -> Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
applicationId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
environmentId

instance
  Prelude.NFData
    DeleteApplicationFromEnvironment
  where
  rnf :: DeleteApplicationFromEnvironment -> ()
rnf DeleteApplicationFromEnvironment' {Text
environmentId :: Text
applicationId :: Text
$sel:environmentId:DeleteApplicationFromEnvironment' :: DeleteApplicationFromEnvironment -> Text
$sel:applicationId:DeleteApplicationFromEnvironment' :: DeleteApplicationFromEnvironment -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
applicationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
environmentId

instance
  Data.ToHeaders
    DeleteApplicationFromEnvironment
  where
  toHeaders :: DeleteApplicationFromEnvironment -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToPath DeleteApplicationFromEnvironment where
  toPath :: DeleteApplicationFromEnvironment -> ByteString
toPath DeleteApplicationFromEnvironment' {Text
environmentId :: Text
applicationId :: Text
$sel:environmentId:DeleteApplicationFromEnvironment' :: DeleteApplicationFromEnvironment -> Text
$sel:applicationId:DeleteApplicationFromEnvironment' :: DeleteApplicationFromEnvironment -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/applications/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
applicationId,
        ByteString
"/environment/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
environmentId
      ]

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

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

-- |
-- Create a value of 'DeleteApplicationFromEnvironmentResponse' 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', 'deleteApplicationFromEnvironmentResponse_httpStatus' - The response's http status code.
newDeleteApplicationFromEnvironmentResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteApplicationFromEnvironmentResponse
newDeleteApplicationFromEnvironmentResponse :: Int -> DeleteApplicationFromEnvironmentResponse
newDeleteApplicationFromEnvironmentResponse
  Int
pHttpStatus_ =
    DeleteApplicationFromEnvironmentResponse'
      { $sel:httpStatus:DeleteApplicationFromEnvironmentResponse' :: Int
httpStatus =
          Int
pHttpStatus_
      }

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

instance
  Prelude.NFData
    DeleteApplicationFromEnvironmentResponse
  where
  rnf :: DeleteApplicationFromEnvironmentResponse -> ()
rnf DeleteApplicationFromEnvironmentResponse' {Int
httpStatus :: Int
$sel:httpStatus:DeleteApplicationFromEnvironmentResponse' :: DeleteApplicationFromEnvironmentResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus