{-# 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.CodeStar.DeleteProject
-- 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 project, including project resources. Does not delete users
-- associated with the project, but does delete the IAM roles that allowed
-- access to the project.
module Amazonka.CodeStar.DeleteProject
  ( -- * Creating a Request
    DeleteProject (..),
    newDeleteProject,

    -- * Request Lenses
    deleteProject_clientRequestToken,
    deleteProject_deleteStack,
    deleteProject_id,

    -- * Destructuring the Response
    DeleteProjectResponse (..),
    newDeleteProjectResponse,

    -- * Response Lenses
    deleteProjectResponse_projectArn,
    deleteProjectResponse_stackId,
    deleteProjectResponse_httpStatus,
  )
where

import Amazonka.CodeStar.Types
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

-- | /See:/ 'newDeleteProject' smart constructor.
data DeleteProject = DeleteProject'
  { -- | A user- or system-generated token that identifies the entity that
    -- requested project deletion. This token can be used to repeat the
    -- request.
    DeleteProject -> Maybe Text
clientRequestToken :: Prelude.Maybe Prelude.Text,
    -- | Whether to send a delete request for the primary stack in AWS
    -- CloudFormation originally used to generate the project and its
    -- resources. This option will delete all AWS resources for the project
    -- (except for any buckets in Amazon S3) as well as deleting the project
    -- itself. Recommended for most use cases.
    DeleteProject -> Maybe Bool
deleteStack :: Prelude.Maybe Prelude.Bool,
    -- | The ID of the project to be deleted in AWS CodeStar.
    DeleteProject -> Text
id :: Prelude.Text
  }
  deriving (DeleteProject -> DeleteProject -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteProject -> DeleteProject -> Bool
$c/= :: DeleteProject -> DeleteProject -> Bool
== :: DeleteProject -> DeleteProject -> Bool
$c== :: DeleteProject -> DeleteProject -> Bool
Prelude.Eq, ReadPrec [DeleteProject]
ReadPrec DeleteProject
Int -> ReadS DeleteProject
ReadS [DeleteProject]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteProject]
$creadListPrec :: ReadPrec [DeleteProject]
readPrec :: ReadPrec DeleteProject
$creadPrec :: ReadPrec DeleteProject
readList :: ReadS [DeleteProject]
$creadList :: ReadS [DeleteProject]
readsPrec :: Int -> ReadS DeleteProject
$creadsPrec :: Int -> ReadS DeleteProject
Prelude.Read, Int -> DeleteProject -> ShowS
[DeleteProject] -> ShowS
DeleteProject -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteProject] -> ShowS
$cshowList :: [DeleteProject] -> ShowS
show :: DeleteProject -> String
$cshow :: DeleteProject -> String
showsPrec :: Int -> DeleteProject -> ShowS
$cshowsPrec :: Int -> DeleteProject -> ShowS
Prelude.Show, forall x. Rep DeleteProject x -> DeleteProject
forall x. DeleteProject -> Rep DeleteProject x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteProject x -> DeleteProject
$cfrom :: forall x. DeleteProject -> Rep DeleteProject x
Prelude.Generic)

-- |
-- Create a value of 'DeleteProject' 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:
--
-- 'clientRequestToken', 'deleteProject_clientRequestToken' - A user- or system-generated token that identifies the entity that
-- requested project deletion. This token can be used to repeat the
-- request.
--
-- 'deleteStack', 'deleteProject_deleteStack' - Whether to send a delete request for the primary stack in AWS
-- CloudFormation originally used to generate the project and its
-- resources. This option will delete all AWS resources for the project
-- (except for any buckets in Amazon S3) as well as deleting the project
-- itself. Recommended for most use cases.
--
-- 'id', 'deleteProject_id' - The ID of the project to be deleted in AWS CodeStar.
newDeleteProject ::
  -- | 'id'
  Prelude.Text ->
  DeleteProject
newDeleteProject :: Text -> DeleteProject
newDeleteProject Text
pId_ =
  DeleteProject'
    { $sel:clientRequestToken:DeleteProject' :: Maybe Text
clientRequestToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:deleteStack:DeleteProject' :: Maybe Bool
deleteStack = forall a. Maybe a
Prelude.Nothing,
      $sel:id:DeleteProject' :: Text
id = Text
pId_
    }

-- | A user- or system-generated token that identifies the entity that
-- requested project deletion. This token can be used to repeat the
-- request.
deleteProject_clientRequestToken :: Lens.Lens' DeleteProject (Prelude.Maybe Prelude.Text)
deleteProject_clientRequestToken :: Lens' DeleteProject (Maybe Text)
deleteProject_clientRequestToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteProject' {Maybe Text
clientRequestToken :: Maybe Text
$sel:clientRequestToken:DeleteProject' :: DeleteProject -> Maybe Text
clientRequestToken} -> Maybe Text
clientRequestToken) (\s :: DeleteProject
s@DeleteProject' {} Maybe Text
a -> DeleteProject
s {$sel:clientRequestToken:DeleteProject' :: Maybe Text
clientRequestToken = Maybe Text
a} :: DeleteProject)

-- | Whether to send a delete request for the primary stack in AWS
-- CloudFormation originally used to generate the project and its
-- resources. This option will delete all AWS resources for the project
-- (except for any buckets in Amazon S3) as well as deleting the project
-- itself. Recommended for most use cases.
deleteProject_deleteStack :: Lens.Lens' DeleteProject (Prelude.Maybe Prelude.Bool)
deleteProject_deleteStack :: Lens' DeleteProject (Maybe Bool)
deleteProject_deleteStack = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteProject' {Maybe Bool
deleteStack :: Maybe Bool
$sel:deleteStack:DeleteProject' :: DeleteProject -> Maybe Bool
deleteStack} -> Maybe Bool
deleteStack) (\s :: DeleteProject
s@DeleteProject' {} Maybe Bool
a -> DeleteProject
s {$sel:deleteStack:DeleteProject' :: Maybe Bool
deleteStack = Maybe Bool
a} :: DeleteProject)

-- | The ID of the project to be deleted in AWS CodeStar.
deleteProject_id :: Lens.Lens' DeleteProject Prelude.Text
deleteProject_id :: Lens' DeleteProject Text
deleteProject_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteProject' {Text
id :: Text
$sel:id:DeleteProject' :: DeleteProject -> Text
id} -> Text
id) (\s :: DeleteProject
s@DeleteProject' {} Text
a -> DeleteProject
s {$sel:id:DeleteProject' :: Text
id = Text
a} :: DeleteProject)

instance Core.AWSRequest DeleteProject where
  type
    AWSResponse DeleteProject =
      DeleteProjectResponse
  request :: (Service -> Service) -> DeleteProject -> Request DeleteProject
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 DeleteProject
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DeleteProject)))
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 Text -> Maybe Text -> Int -> DeleteProjectResponse
DeleteProjectResponse'
            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
"projectArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"stackId")
            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 DeleteProject where
  hashWithSalt :: Int -> DeleteProject -> Int
hashWithSalt Int
_salt DeleteProject' {Maybe Bool
Maybe Text
Text
id :: Text
deleteStack :: Maybe Bool
clientRequestToken :: Maybe Text
$sel:id:DeleteProject' :: DeleteProject -> Text
$sel:deleteStack:DeleteProject' :: DeleteProject -> Maybe Bool
$sel:clientRequestToken:DeleteProject' :: DeleteProject -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientRequestToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
deleteStack
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
id

instance Prelude.NFData DeleteProject where
  rnf :: DeleteProject -> ()
rnf DeleteProject' {Maybe Bool
Maybe Text
Text
id :: Text
deleteStack :: Maybe Bool
clientRequestToken :: Maybe Text
$sel:id:DeleteProject' :: DeleteProject -> Text
$sel:deleteStack:DeleteProject' :: DeleteProject -> Maybe Bool
$sel:clientRequestToken:DeleteProject' :: DeleteProject -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientRequestToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
deleteStack
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
id

instance Data.ToHeaders DeleteProject where
  toHeaders :: DeleteProject -> 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
"CodeStar_20170419.DeleteProject" ::
                          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 DeleteProject where
  toJSON :: DeleteProject -> Value
toJSON DeleteProject' {Maybe Bool
Maybe Text
Text
id :: Text
deleteStack :: Maybe Bool
clientRequestToken :: Maybe Text
$sel:id:DeleteProject' :: DeleteProject -> Text
$sel:deleteStack:DeleteProject' :: DeleteProject -> Maybe Bool
$sel:clientRequestToken:DeleteProject' :: DeleteProject -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"clientRequestToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
clientRequestToken,
            (Key
"deleteStack" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Bool
deleteStack,
            forall a. a -> Maybe a
Prelude.Just (Key
"id" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
id)
          ]
      )

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

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

-- | /See:/ 'newDeleteProjectResponse' smart constructor.
data DeleteProjectResponse = DeleteProjectResponse'
  { -- | The Amazon Resource Name (ARN) of the deleted project.
    DeleteProjectResponse -> Maybe Text
projectArn :: Prelude.Maybe Prelude.Text,
    -- | The ID of the primary stack in AWS CloudFormation that will be deleted
    -- as part of deleting the project and its resources.
    DeleteProjectResponse -> Maybe Text
stackId :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    DeleteProjectResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DeleteProjectResponse -> DeleteProjectResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteProjectResponse -> DeleteProjectResponse -> Bool
$c/= :: DeleteProjectResponse -> DeleteProjectResponse -> Bool
== :: DeleteProjectResponse -> DeleteProjectResponse -> Bool
$c== :: DeleteProjectResponse -> DeleteProjectResponse -> Bool
Prelude.Eq, ReadPrec [DeleteProjectResponse]
ReadPrec DeleteProjectResponse
Int -> ReadS DeleteProjectResponse
ReadS [DeleteProjectResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteProjectResponse]
$creadListPrec :: ReadPrec [DeleteProjectResponse]
readPrec :: ReadPrec DeleteProjectResponse
$creadPrec :: ReadPrec DeleteProjectResponse
readList :: ReadS [DeleteProjectResponse]
$creadList :: ReadS [DeleteProjectResponse]
readsPrec :: Int -> ReadS DeleteProjectResponse
$creadsPrec :: Int -> ReadS DeleteProjectResponse
Prelude.Read, Int -> DeleteProjectResponse -> ShowS
[DeleteProjectResponse] -> ShowS
DeleteProjectResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteProjectResponse] -> ShowS
$cshowList :: [DeleteProjectResponse] -> ShowS
show :: DeleteProjectResponse -> String
$cshow :: DeleteProjectResponse -> String
showsPrec :: Int -> DeleteProjectResponse -> ShowS
$cshowsPrec :: Int -> DeleteProjectResponse -> ShowS
Prelude.Show, forall x. Rep DeleteProjectResponse x -> DeleteProjectResponse
forall x. DeleteProjectResponse -> Rep DeleteProjectResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteProjectResponse x -> DeleteProjectResponse
$cfrom :: forall x. DeleteProjectResponse -> Rep DeleteProjectResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteProjectResponse' 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:
--
-- 'projectArn', 'deleteProjectResponse_projectArn' - The Amazon Resource Name (ARN) of the deleted project.
--
-- 'stackId', 'deleteProjectResponse_stackId' - The ID of the primary stack in AWS CloudFormation that will be deleted
-- as part of deleting the project and its resources.
--
-- 'httpStatus', 'deleteProjectResponse_httpStatus' - The response's http status code.
newDeleteProjectResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteProjectResponse
newDeleteProjectResponse :: Int -> DeleteProjectResponse
newDeleteProjectResponse Int
pHttpStatus_ =
  DeleteProjectResponse'
    { $sel:projectArn:DeleteProjectResponse' :: Maybe Text
projectArn =
        forall a. Maybe a
Prelude.Nothing,
      $sel:stackId:DeleteProjectResponse' :: Maybe Text
stackId = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DeleteProjectResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The Amazon Resource Name (ARN) of the deleted project.
deleteProjectResponse_projectArn :: Lens.Lens' DeleteProjectResponse (Prelude.Maybe Prelude.Text)
deleteProjectResponse_projectArn :: Lens' DeleteProjectResponse (Maybe Text)
deleteProjectResponse_projectArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteProjectResponse' {Maybe Text
projectArn :: Maybe Text
$sel:projectArn:DeleteProjectResponse' :: DeleteProjectResponse -> Maybe Text
projectArn} -> Maybe Text
projectArn) (\s :: DeleteProjectResponse
s@DeleteProjectResponse' {} Maybe Text
a -> DeleteProjectResponse
s {$sel:projectArn:DeleteProjectResponse' :: Maybe Text
projectArn = Maybe Text
a} :: DeleteProjectResponse)

-- | The ID of the primary stack in AWS CloudFormation that will be deleted
-- as part of deleting the project and its resources.
deleteProjectResponse_stackId :: Lens.Lens' DeleteProjectResponse (Prelude.Maybe Prelude.Text)
deleteProjectResponse_stackId :: Lens' DeleteProjectResponse (Maybe Text)
deleteProjectResponse_stackId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteProjectResponse' {Maybe Text
stackId :: Maybe Text
$sel:stackId:DeleteProjectResponse' :: DeleteProjectResponse -> Maybe Text
stackId} -> Maybe Text
stackId) (\s :: DeleteProjectResponse
s@DeleteProjectResponse' {} Maybe Text
a -> DeleteProjectResponse
s {$sel:stackId:DeleteProjectResponse' :: Maybe Text
stackId = Maybe Text
a} :: DeleteProjectResponse)

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

instance Prelude.NFData DeleteProjectResponse where
  rnf :: DeleteProjectResponse -> ()
rnf DeleteProjectResponse' {Int
Maybe Text
httpStatus :: Int
stackId :: Maybe Text
projectArn :: Maybe Text
$sel:httpStatus:DeleteProjectResponse' :: DeleteProjectResponse -> Int
$sel:stackId:DeleteProjectResponse' :: DeleteProjectResponse -> Maybe Text
$sel:projectArn:DeleteProjectResponse' :: DeleteProjectResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
projectArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
stackId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus