{-# 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.WorkDocs.RemoveResourcePermission
-- 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 the permission for the specified principal from the specified
-- resource.
module Amazonka.WorkDocs.RemoveResourcePermission
  ( -- * Creating a Request
    RemoveResourcePermission (..),
    newRemoveResourcePermission,

    -- * Request Lenses
    removeResourcePermission_authenticationToken,
    removeResourcePermission_principalType,
    removeResourcePermission_resourceId,
    removeResourcePermission_principalId,

    -- * Destructuring the Response
    RemoveResourcePermissionResponse (..),
    newRemoveResourcePermissionResponse,
  )
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.WorkDocs.Types

-- | /See:/ 'newRemoveResourcePermission' smart constructor.
data RemoveResourcePermission = RemoveResourcePermission'
  { -- | Amazon WorkDocs authentication token. Not required when using AWS
    -- administrator credentials to access the API.
    RemoveResourcePermission -> Maybe (Sensitive Text)
authenticationToken :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The principal type of the resource.
    RemoveResourcePermission -> Maybe PrincipalType
principalType :: Prelude.Maybe PrincipalType,
    -- | The ID of the resource.
    RemoveResourcePermission -> Text
resourceId :: Prelude.Text,
    -- | The principal ID of the resource.
    RemoveResourcePermission -> Text
principalId :: Prelude.Text
  }
  deriving (RemoveResourcePermission -> RemoveResourcePermission -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RemoveResourcePermission -> RemoveResourcePermission -> Bool
$c/= :: RemoveResourcePermission -> RemoveResourcePermission -> Bool
== :: RemoveResourcePermission -> RemoveResourcePermission -> Bool
$c== :: RemoveResourcePermission -> RemoveResourcePermission -> Bool
Prelude.Eq, Int -> RemoveResourcePermission -> ShowS
[RemoveResourcePermission] -> ShowS
RemoveResourcePermission -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RemoveResourcePermission] -> ShowS
$cshowList :: [RemoveResourcePermission] -> ShowS
show :: RemoveResourcePermission -> String
$cshow :: RemoveResourcePermission -> String
showsPrec :: Int -> RemoveResourcePermission -> ShowS
$cshowsPrec :: Int -> RemoveResourcePermission -> ShowS
Prelude.Show, forall x.
Rep RemoveResourcePermission x -> RemoveResourcePermission
forall x.
RemoveResourcePermission -> Rep RemoveResourcePermission x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep RemoveResourcePermission x -> RemoveResourcePermission
$cfrom :: forall x.
RemoveResourcePermission -> Rep RemoveResourcePermission x
Prelude.Generic)

-- |
-- Create a value of 'RemoveResourcePermission' 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:
--
-- 'authenticationToken', 'removeResourcePermission_authenticationToken' - Amazon WorkDocs authentication token. Not required when using AWS
-- administrator credentials to access the API.
--
-- 'principalType', 'removeResourcePermission_principalType' - The principal type of the resource.
--
-- 'resourceId', 'removeResourcePermission_resourceId' - The ID of the resource.
--
-- 'principalId', 'removeResourcePermission_principalId' - The principal ID of the resource.
newRemoveResourcePermission ::
  -- | 'resourceId'
  Prelude.Text ->
  -- | 'principalId'
  Prelude.Text ->
  RemoveResourcePermission
newRemoveResourcePermission :: Text -> Text -> RemoveResourcePermission
newRemoveResourcePermission
  Text
pResourceId_
  Text
pPrincipalId_ =
    RemoveResourcePermission'
      { $sel:authenticationToken:RemoveResourcePermission' :: Maybe (Sensitive Text)
authenticationToken =
          forall a. Maybe a
Prelude.Nothing,
        $sel:principalType:RemoveResourcePermission' :: Maybe PrincipalType
principalType = forall a. Maybe a
Prelude.Nothing,
        $sel:resourceId:RemoveResourcePermission' :: Text
resourceId = Text
pResourceId_,
        $sel:principalId:RemoveResourcePermission' :: Text
principalId = Text
pPrincipalId_
      }

-- | Amazon WorkDocs authentication token. Not required when using AWS
-- administrator credentials to access the API.
removeResourcePermission_authenticationToken :: Lens.Lens' RemoveResourcePermission (Prelude.Maybe Prelude.Text)
removeResourcePermission_authenticationToken :: Lens' RemoveResourcePermission (Maybe Text)
removeResourcePermission_authenticationToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemoveResourcePermission' {Maybe (Sensitive Text)
authenticationToken :: Maybe (Sensitive Text)
$sel:authenticationToken:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe (Sensitive Text)
authenticationToken} -> Maybe (Sensitive Text)
authenticationToken) (\s :: RemoveResourcePermission
s@RemoveResourcePermission' {} Maybe (Sensitive Text)
a -> RemoveResourcePermission
s {$sel:authenticationToken:RemoveResourcePermission' :: Maybe (Sensitive Text)
authenticationToken = Maybe (Sensitive Text)
a} :: RemoveResourcePermission) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall a. Iso' (Sensitive a) a
Data._Sensitive

-- | The principal type of the resource.
removeResourcePermission_principalType :: Lens.Lens' RemoveResourcePermission (Prelude.Maybe PrincipalType)
removeResourcePermission_principalType :: Lens' RemoveResourcePermission (Maybe PrincipalType)
removeResourcePermission_principalType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemoveResourcePermission' {Maybe PrincipalType
principalType :: Maybe PrincipalType
$sel:principalType:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe PrincipalType
principalType} -> Maybe PrincipalType
principalType) (\s :: RemoveResourcePermission
s@RemoveResourcePermission' {} Maybe PrincipalType
a -> RemoveResourcePermission
s {$sel:principalType:RemoveResourcePermission' :: Maybe PrincipalType
principalType = Maybe PrincipalType
a} :: RemoveResourcePermission)

-- | The ID of the resource.
removeResourcePermission_resourceId :: Lens.Lens' RemoveResourcePermission Prelude.Text
removeResourcePermission_resourceId :: Lens' RemoveResourcePermission Text
removeResourcePermission_resourceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemoveResourcePermission' {Text
resourceId :: Text
$sel:resourceId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
resourceId} -> Text
resourceId) (\s :: RemoveResourcePermission
s@RemoveResourcePermission' {} Text
a -> RemoveResourcePermission
s {$sel:resourceId:RemoveResourcePermission' :: Text
resourceId = Text
a} :: RemoveResourcePermission)

-- | The principal ID of the resource.
removeResourcePermission_principalId :: Lens.Lens' RemoveResourcePermission Prelude.Text
removeResourcePermission_principalId :: Lens' RemoveResourcePermission Text
removeResourcePermission_principalId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RemoveResourcePermission' {Text
principalId :: Text
$sel:principalId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
principalId} -> Text
principalId) (\s :: RemoveResourcePermission
s@RemoveResourcePermission' {} Text
a -> RemoveResourcePermission
s {$sel:principalId:RemoveResourcePermission' :: Text
principalId = Text
a} :: RemoveResourcePermission)

instance Core.AWSRequest RemoveResourcePermission where
  type
    AWSResponse RemoveResourcePermission =
      RemoveResourcePermissionResponse
  request :: (Service -> Service)
-> RemoveResourcePermission -> Request RemoveResourcePermission
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 RemoveResourcePermission
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse RemoveResourcePermission)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull
      RemoveResourcePermissionResponse
RemoveResourcePermissionResponse'

instance Prelude.Hashable RemoveResourcePermission where
  hashWithSalt :: Int -> RemoveResourcePermission -> Int
hashWithSalt Int
_salt RemoveResourcePermission' {Maybe (Sensitive Text)
Maybe PrincipalType
Text
principalId :: Text
resourceId :: Text
principalType :: Maybe PrincipalType
authenticationToken :: Maybe (Sensitive Text)
$sel:principalId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
$sel:resourceId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
$sel:principalType:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe PrincipalType
$sel:authenticationToken:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe (Sensitive Text)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
authenticationToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PrincipalType
principalType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
resourceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
principalId

instance Prelude.NFData RemoveResourcePermission where
  rnf :: RemoveResourcePermission -> ()
rnf RemoveResourcePermission' {Maybe (Sensitive Text)
Maybe PrincipalType
Text
principalId :: Text
resourceId :: Text
principalType :: Maybe PrincipalType
authenticationToken :: Maybe (Sensitive Text)
$sel:principalId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
$sel:resourceId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
$sel:principalType:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe PrincipalType
$sel:authenticationToken:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe (Sensitive Text)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
authenticationToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PrincipalType
principalType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
resourceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
principalId

instance Data.ToHeaders RemoveResourcePermission where
  toHeaders :: RemoveResourcePermission -> [Header]
toHeaders RemoveResourcePermission' {Maybe (Sensitive Text)
Maybe PrincipalType
Text
principalId :: Text
resourceId :: Text
principalType :: Maybe PrincipalType
authenticationToken :: Maybe (Sensitive Text)
$sel:principalId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
$sel:resourceId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
$sel:principalType:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe PrincipalType
$sel:authenticationToken:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe (Sensitive Text)
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ HeaderName
"Authentication" forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# Maybe (Sensitive Text)
authenticationToken,
        HeaderName
"Content-Type"
          forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# (ByteString
"application/x-amz-json-1.1" :: Prelude.ByteString)
      ]

instance Data.ToPath RemoveResourcePermission where
  toPath :: RemoveResourcePermission -> ByteString
toPath RemoveResourcePermission' {Maybe (Sensitive Text)
Maybe PrincipalType
Text
principalId :: Text
resourceId :: Text
principalType :: Maybe PrincipalType
authenticationToken :: Maybe (Sensitive Text)
$sel:principalId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
$sel:resourceId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
$sel:principalType:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe PrincipalType
$sel:authenticationToken:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe (Sensitive Text)
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/api/v1/resources/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
resourceId,
        ByteString
"/permissions/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
principalId
      ]

instance Data.ToQuery RemoveResourcePermission where
  toQuery :: RemoveResourcePermission -> QueryString
toQuery RemoveResourcePermission' {Maybe (Sensitive Text)
Maybe PrincipalType
Text
principalId :: Text
resourceId :: Text
principalType :: Maybe PrincipalType
authenticationToken :: Maybe (Sensitive Text)
$sel:principalId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
$sel:resourceId:RemoveResourcePermission' :: RemoveResourcePermission -> Text
$sel:principalType:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe PrincipalType
$sel:authenticationToken:RemoveResourcePermission' :: RemoveResourcePermission -> Maybe (Sensitive Text)
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat [ByteString
"type" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe PrincipalType
principalType]

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

-- |
-- Create a value of 'RemoveResourcePermissionResponse' 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.
newRemoveResourcePermissionResponse ::
  RemoveResourcePermissionResponse
newRemoveResourcePermissionResponse :: RemoveResourcePermissionResponse
newRemoveResourcePermissionResponse =
  RemoveResourcePermissionResponse
RemoveResourcePermissionResponse'

instance
  Prelude.NFData
    RemoveResourcePermissionResponse
  where
  rnf :: RemoveResourcePermissionResponse -> ()
rnf RemoveResourcePermissionResponse
_ = ()