{-# 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.SSMSAP.DeleteResourcePermission
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Removes permissions associated with the target database.
module Amazonka.SSMSAP.DeleteResourcePermission
  ( -- * Creating a Request
    DeleteResourcePermission (..),
    newDeleteResourcePermission,

    -- * Request Lenses
    deleteResourcePermission_actionType,
    deleteResourcePermission_sourceResourceArn,
    deleteResourcePermission_resourceArn,

    -- * Destructuring the Response
    DeleteResourcePermissionResponse (..),
    newDeleteResourcePermissionResponse,

    -- * Response Lenses
    deleteResourcePermissionResponse_policy,
    deleteResourcePermissionResponse_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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.SSMSAP.Types

-- | /See:/ 'newDeleteResourcePermission' smart constructor.
data DeleteResourcePermission = DeleteResourcePermission'
  { DeleteResourcePermission -> Maybe PermissionActionType
actionType :: Prelude.Maybe PermissionActionType,
    DeleteResourcePermission -> Maybe Text
sourceResourceArn :: Prelude.Maybe Prelude.Text,
    DeleteResourcePermission -> Text
resourceArn :: Prelude.Text
  }
  deriving (DeleteResourcePermission -> DeleteResourcePermission -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteResourcePermission -> DeleteResourcePermission -> Bool
$c/= :: DeleteResourcePermission -> DeleteResourcePermission -> Bool
== :: DeleteResourcePermission -> DeleteResourcePermission -> Bool
$c== :: DeleteResourcePermission -> DeleteResourcePermission -> Bool
Prelude.Eq, ReadPrec [DeleteResourcePermission]
ReadPrec DeleteResourcePermission
Int -> ReadS DeleteResourcePermission
ReadS [DeleteResourcePermission]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteResourcePermission]
$creadListPrec :: ReadPrec [DeleteResourcePermission]
readPrec :: ReadPrec DeleteResourcePermission
$creadPrec :: ReadPrec DeleteResourcePermission
readList :: ReadS [DeleteResourcePermission]
$creadList :: ReadS [DeleteResourcePermission]
readsPrec :: Int -> ReadS DeleteResourcePermission
$creadsPrec :: Int -> ReadS DeleteResourcePermission
Prelude.Read, Int -> DeleteResourcePermission -> ShowS
[DeleteResourcePermission] -> ShowS
DeleteResourcePermission -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteResourcePermission] -> ShowS
$cshowList :: [DeleteResourcePermission] -> ShowS
show :: DeleteResourcePermission -> String
$cshow :: DeleteResourcePermission -> String
showsPrec :: Int -> DeleteResourcePermission -> ShowS
$cshowsPrec :: Int -> DeleteResourcePermission -> ShowS
Prelude.Show, forall x.
Rep DeleteResourcePermission x -> DeleteResourcePermission
forall x.
DeleteResourcePermission -> Rep DeleteResourcePermission x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteResourcePermission x -> DeleteResourcePermission
$cfrom :: forall x.
DeleteResourcePermission -> Rep DeleteResourcePermission x
Prelude.Generic)

-- |
-- Create a value of 'DeleteResourcePermission' 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:
--
-- 'actionType', 'deleteResourcePermission_actionType' -
--
-- 'sourceResourceArn', 'deleteResourcePermission_sourceResourceArn' -
--
-- 'resourceArn', 'deleteResourcePermission_resourceArn' -
newDeleteResourcePermission ::
  -- | 'resourceArn'
  Prelude.Text ->
  DeleteResourcePermission
newDeleteResourcePermission :: Text -> DeleteResourcePermission
newDeleteResourcePermission Text
pResourceArn_ =
  DeleteResourcePermission'
    { $sel:actionType:DeleteResourcePermission' :: Maybe PermissionActionType
actionType =
        forall a. Maybe a
Prelude.Nothing,
      $sel:sourceResourceArn:DeleteResourcePermission' :: Maybe Text
sourceResourceArn = forall a. Maybe a
Prelude.Nothing,
      $sel:resourceArn:DeleteResourcePermission' :: Text
resourceArn = Text
pResourceArn_
    }

deleteResourcePermission_actionType :: Lens.Lens' DeleteResourcePermission (Prelude.Maybe PermissionActionType)
deleteResourcePermission_actionType :: Lens' DeleteResourcePermission (Maybe PermissionActionType)
deleteResourcePermission_actionType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteResourcePermission' {Maybe PermissionActionType
actionType :: Maybe PermissionActionType
$sel:actionType:DeleteResourcePermission' :: DeleteResourcePermission -> Maybe PermissionActionType
actionType} -> Maybe PermissionActionType
actionType) (\s :: DeleteResourcePermission
s@DeleteResourcePermission' {} Maybe PermissionActionType
a -> DeleteResourcePermission
s {$sel:actionType:DeleteResourcePermission' :: Maybe PermissionActionType
actionType = Maybe PermissionActionType
a} :: DeleteResourcePermission)

deleteResourcePermission_sourceResourceArn :: Lens.Lens' DeleteResourcePermission (Prelude.Maybe Prelude.Text)
deleteResourcePermission_sourceResourceArn :: Lens' DeleteResourcePermission (Maybe Text)
deleteResourcePermission_sourceResourceArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteResourcePermission' {Maybe Text
sourceResourceArn :: Maybe Text
$sel:sourceResourceArn:DeleteResourcePermission' :: DeleteResourcePermission -> Maybe Text
sourceResourceArn} -> Maybe Text
sourceResourceArn) (\s :: DeleteResourcePermission
s@DeleteResourcePermission' {} Maybe Text
a -> DeleteResourcePermission
s {$sel:sourceResourceArn:DeleteResourcePermission' :: Maybe Text
sourceResourceArn = Maybe Text
a} :: DeleteResourcePermission)

deleteResourcePermission_resourceArn :: Lens.Lens' DeleteResourcePermission Prelude.Text
deleteResourcePermission_resourceArn :: Lens' DeleteResourcePermission Text
deleteResourcePermission_resourceArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteResourcePermission' {Text
resourceArn :: Text
$sel:resourceArn:DeleteResourcePermission' :: DeleteResourcePermission -> Text
resourceArn} -> Text
resourceArn) (\s :: DeleteResourcePermission
s@DeleteResourcePermission' {} Text
a -> DeleteResourcePermission
s {$sel:resourceArn:DeleteResourcePermission' :: Text
resourceArn = Text
a} :: DeleteResourcePermission)

instance Core.AWSRequest DeleteResourcePermission where
  type
    AWSResponse DeleteResourcePermission =
      DeleteResourcePermissionResponse
  request :: (Service -> Service)
-> DeleteResourcePermission -> Request DeleteResourcePermission
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 DeleteResourcePermission
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DeleteResourcePermission)))
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 -> Int -> DeleteResourcePermissionResponse
DeleteResourcePermissionResponse'
            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
"Policy")
            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 DeleteResourcePermission where
  hashWithSalt :: Int -> DeleteResourcePermission -> Int
hashWithSalt Int
_salt DeleteResourcePermission' {Maybe Text
Maybe PermissionActionType
Text
resourceArn :: Text
sourceResourceArn :: Maybe Text
actionType :: Maybe PermissionActionType
$sel:resourceArn:DeleteResourcePermission' :: DeleteResourcePermission -> Text
$sel:sourceResourceArn:DeleteResourcePermission' :: DeleteResourcePermission -> Maybe Text
$sel:actionType:DeleteResourcePermission' :: DeleteResourcePermission -> Maybe PermissionActionType
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PermissionActionType
actionType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
sourceResourceArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
resourceArn

instance Prelude.NFData DeleteResourcePermission where
  rnf :: DeleteResourcePermission -> ()
rnf DeleteResourcePermission' {Maybe Text
Maybe PermissionActionType
Text
resourceArn :: Text
sourceResourceArn :: Maybe Text
actionType :: Maybe PermissionActionType
$sel:resourceArn:DeleteResourcePermission' :: DeleteResourcePermission -> Text
$sel:sourceResourceArn:DeleteResourcePermission' :: DeleteResourcePermission -> Maybe Text
$sel:actionType:DeleteResourcePermission' :: DeleteResourcePermission -> Maybe PermissionActionType
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe PermissionActionType
actionType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
sourceResourceArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
resourceArn

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

instance Data.ToPath DeleteResourcePermission where
  toPath :: DeleteResourcePermission -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/delete-resource-permission"

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

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

-- |
-- Create a value of 'DeleteResourcePermissionResponse' 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:
--
-- 'policy', 'deleteResourcePermissionResponse_policy' -
--
-- 'httpStatus', 'deleteResourcePermissionResponse_httpStatus' - The response's http status code.
newDeleteResourcePermissionResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteResourcePermissionResponse
newDeleteResourcePermissionResponse :: Int -> DeleteResourcePermissionResponse
newDeleteResourcePermissionResponse Int
pHttpStatus_ =
  DeleteResourcePermissionResponse'
    { $sel:policy:DeleteResourcePermissionResponse' :: Maybe Text
policy =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DeleteResourcePermissionResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

deleteResourcePermissionResponse_policy :: Lens.Lens' DeleteResourcePermissionResponse (Prelude.Maybe Prelude.Text)
deleteResourcePermissionResponse_policy :: Lens' DeleteResourcePermissionResponse (Maybe Text)
deleteResourcePermissionResponse_policy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteResourcePermissionResponse' {Maybe Text
policy :: Maybe Text
$sel:policy:DeleteResourcePermissionResponse' :: DeleteResourcePermissionResponse -> Maybe Text
policy} -> Maybe Text
policy) (\s :: DeleteResourcePermissionResponse
s@DeleteResourcePermissionResponse' {} Maybe Text
a -> DeleteResourcePermissionResponse
s {$sel:policy:DeleteResourcePermissionResponse' :: Maybe Text
policy = Maybe Text
a} :: DeleteResourcePermissionResponse)

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

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