{-# 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.Rekognition.DeleteProjectPolicy
-- 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 an existing project policy.
--
-- To get a list of project policies attached to a project, call
-- ListProjectPolicies. To attach a project policy to a project, call
-- PutProjectPolicy.
module Amazonka.Rekognition.DeleteProjectPolicy
  ( -- * Creating a Request
    DeleteProjectPolicy (..),
    newDeleteProjectPolicy,

    -- * Request Lenses
    deleteProjectPolicy_policyRevisionId,
    deleteProjectPolicy_projectArn,
    deleteProjectPolicy_policyName,

    -- * Destructuring the Response
    DeleteProjectPolicyResponse (..),
    newDeleteProjectPolicyResponse,

    -- * Response Lenses
    deleteProjectPolicyResponse_httpStatus,
  )
where

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 Amazonka.Rekognition.Types
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newDeleteProjectPolicy' smart constructor.
data DeleteProjectPolicy = DeleteProjectPolicy'
  { -- | The ID of the project policy revision that you want to delete.
    DeleteProjectPolicy -> Maybe Text
policyRevisionId :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the project that the project policy
    -- you want to delete is attached to.
    DeleteProjectPolicy -> Text
projectArn :: Prelude.Text,
    -- | The name of the policy that you want to delete.
    DeleteProjectPolicy -> Text
policyName :: Prelude.Text
  }
  deriving (DeleteProjectPolicy -> DeleteProjectPolicy -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteProjectPolicy -> DeleteProjectPolicy -> Bool
$c/= :: DeleteProjectPolicy -> DeleteProjectPolicy -> Bool
== :: DeleteProjectPolicy -> DeleteProjectPolicy -> Bool
$c== :: DeleteProjectPolicy -> DeleteProjectPolicy -> Bool
Prelude.Eq, ReadPrec [DeleteProjectPolicy]
ReadPrec DeleteProjectPolicy
Int -> ReadS DeleteProjectPolicy
ReadS [DeleteProjectPolicy]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteProjectPolicy]
$creadListPrec :: ReadPrec [DeleteProjectPolicy]
readPrec :: ReadPrec DeleteProjectPolicy
$creadPrec :: ReadPrec DeleteProjectPolicy
readList :: ReadS [DeleteProjectPolicy]
$creadList :: ReadS [DeleteProjectPolicy]
readsPrec :: Int -> ReadS DeleteProjectPolicy
$creadsPrec :: Int -> ReadS DeleteProjectPolicy
Prelude.Read, Int -> DeleteProjectPolicy -> ShowS
[DeleteProjectPolicy] -> ShowS
DeleteProjectPolicy -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteProjectPolicy] -> ShowS
$cshowList :: [DeleteProjectPolicy] -> ShowS
show :: DeleteProjectPolicy -> String
$cshow :: DeleteProjectPolicy -> String
showsPrec :: Int -> DeleteProjectPolicy -> ShowS
$cshowsPrec :: Int -> DeleteProjectPolicy -> ShowS
Prelude.Show, forall x. Rep DeleteProjectPolicy x -> DeleteProjectPolicy
forall x. DeleteProjectPolicy -> Rep DeleteProjectPolicy x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteProjectPolicy x -> DeleteProjectPolicy
$cfrom :: forall x. DeleteProjectPolicy -> Rep DeleteProjectPolicy x
Prelude.Generic)

-- |
-- Create a value of 'DeleteProjectPolicy' 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:
--
-- 'policyRevisionId', 'deleteProjectPolicy_policyRevisionId' - The ID of the project policy revision that you want to delete.
--
-- 'projectArn', 'deleteProjectPolicy_projectArn' - The Amazon Resource Name (ARN) of the project that the project policy
-- you want to delete is attached to.
--
-- 'policyName', 'deleteProjectPolicy_policyName' - The name of the policy that you want to delete.
newDeleteProjectPolicy ::
  -- | 'projectArn'
  Prelude.Text ->
  -- | 'policyName'
  Prelude.Text ->
  DeleteProjectPolicy
newDeleteProjectPolicy :: Text -> Text -> DeleteProjectPolicy
newDeleteProjectPolicy Text
pProjectArn_ Text
pPolicyName_ =
  DeleteProjectPolicy'
    { $sel:policyRevisionId:DeleteProjectPolicy' :: Maybe Text
policyRevisionId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:projectArn:DeleteProjectPolicy' :: Text
projectArn = Text
pProjectArn_,
      $sel:policyName:DeleteProjectPolicy' :: Text
policyName = Text
pPolicyName_
    }

-- | The ID of the project policy revision that you want to delete.
deleteProjectPolicy_policyRevisionId :: Lens.Lens' DeleteProjectPolicy (Prelude.Maybe Prelude.Text)
deleteProjectPolicy_policyRevisionId :: Lens' DeleteProjectPolicy (Maybe Text)
deleteProjectPolicy_policyRevisionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteProjectPolicy' {Maybe Text
policyRevisionId :: Maybe Text
$sel:policyRevisionId:DeleteProjectPolicy' :: DeleteProjectPolicy -> Maybe Text
policyRevisionId} -> Maybe Text
policyRevisionId) (\s :: DeleteProjectPolicy
s@DeleteProjectPolicy' {} Maybe Text
a -> DeleteProjectPolicy
s {$sel:policyRevisionId:DeleteProjectPolicy' :: Maybe Text
policyRevisionId = Maybe Text
a} :: DeleteProjectPolicy)

-- | The Amazon Resource Name (ARN) of the project that the project policy
-- you want to delete is attached to.
deleteProjectPolicy_projectArn :: Lens.Lens' DeleteProjectPolicy Prelude.Text
deleteProjectPolicy_projectArn :: Lens' DeleteProjectPolicy Text
deleteProjectPolicy_projectArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteProjectPolicy' {Text
projectArn :: Text
$sel:projectArn:DeleteProjectPolicy' :: DeleteProjectPolicy -> Text
projectArn} -> Text
projectArn) (\s :: DeleteProjectPolicy
s@DeleteProjectPolicy' {} Text
a -> DeleteProjectPolicy
s {$sel:projectArn:DeleteProjectPolicy' :: Text
projectArn = Text
a} :: DeleteProjectPolicy)

-- | The name of the policy that you want to delete.
deleteProjectPolicy_policyName :: Lens.Lens' DeleteProjectPolicy Prelude.Text
deleteProjectPolicy_policyName :: Lens' DeleteProjectPolicy Text
deleteProjectPolicy_policyName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteProjectPolicy' {Text
policyName :: Text
$sel:policyName:DeleteProjectPolicy' :: DeleteProjectPolicy -> Text
policyName} -> Text
policyName) (\s :: DeleteProjectPolicy
s@DeleteProjectPolicy' {} Text
a -> DeleteProjectPolicy
s {$sel:policyName:DeleteProjectPolicy' :: Text
policyName = Text
a} :: DeleteProjectPolicy)

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

instance Prelude.NFData DeleteProjectPolicy where
  rnf :: DeleteProjectPolicy -> ()
rnf DeleteProjectPolicy' {Maybe Text
Text
policyName :: Text
projectArn :: Text
policyRevisionId :: Maybe Text
$sel:policyName:DeleteProjectPolicy' :: DeleteProjectPolicy -> Text
$sel:projectArn:DeleteProjectPolicy' :: DeleteProjectPolicy -> Text
$sel:policyRevisionId:DeleteProjectPolicy' :: DeleteProjectPolicy -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
policyRevisionId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
projectArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
policyName

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

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

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

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

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

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

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