{-# 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.WorkSpaces.ModifySelfservicePermissions
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Modifies the self-service WorkSpace management capabilities for your
-- users. For more information, see
-- <https://docs.aws.amazon.com/workspaces/latest/adminguide/enable-user-self-service-workspace-management.html Enable Self-Service WorkSpace Management Capabilities for Your Users>.
module Amazonka.WorkSpaces.ModifySelfservicePermissions
  ( -- * Creating a Request
    ModifySelfservicePermissions (..),
    newModifySelfservicePermissions,

    -- * Request Lenses
    modifySelfservicePermissions_resourceId,
    modifySelfservicePermissions_selfservicePermissions,

    -- * Destructuring the Response
    ModifySelfservicePermissionsResponse (..),
    newModifySelfservicePermissionsResponse,

    -- * Response Lenses
    modifySelfservicePermissionsResponse_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.WorkSpaces.Types

-- | /See:/ 'newModifySelfservicePermissions' smart constructor.
data ModifySelfservicePermissions = ModifySelfservicePermissions'
  { -- | The identifier of the directory.
    ModifySelfservicePermissions -> Text
resourceId :: Prelude.Text,
    -- | The permissions to enable or disable self-service capabilities.
    ModifySelfservicePermissions -> SelfservicePermissions
selfservicePermissions :: SelfservicePermissions
  }
  deriving (ModifySelfservicePermissions
-> ModifySelfservicePermissions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ModifySelfservicePermissions
-> ModifySelfservicePermissions -> Bool
$c/= :: ModifySelfservicePermissions
-> ModifySelfservicePermissions -> Bool
== :: ModifySelfservicePermissions
-> ModifySelfservicePermissions -> Bool
$c== :: ModifySelfservicePermissions
-> ModifySelfservicePermissions -> Bool
Prelude.Eq, ReadPrec [ModifySelfservicePermissions]
ReadPrec ModifySelfservicePermissions
Int -> ReadS ModifySelfservicePermissions
ReadS [ModifySelfservicePermissions]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ModifySelfservicePermissions]
$creadListPrec :: ReadPrec [ModifySelfservicePermissions]
readPrec :: ReadPrec ModifySelfservicePermissions
$creadPrec :: ReadPrec ModifySelfservicePermissions
readList :: ReadS [ModifySelfservicePermissions]
$creadList :: ReadS [ModifySelfservicePermissions]
readsPrec :: Int -> ReadS ModifySelfservicePermissions
$creadsPrec :: Int -> ReadS ModifySelfservicePermissions
Prelude.Read, Int -> ModifySelfservicePermissions -> ShowS
[ModifySelfservicePermissions] -> ShowS
ModifySelfservicePermissions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ModifySelfservicePermissions] -> ShowS
$cshowList :: [ModifySelfservicePermissions] -> ShowS
show :: ModifySelfservicePermissions -> String
$cshow :: ModifySelfservicePermissions -> String
showsPrec :: Int -> ModifySelfservicePermissions -> ShowS
$cshowsPrec :: Int -> ModifySelfservicePermissions -> ShowS
Prelude.Show, forall x.
Rep ModifySelfservicePermissions x -> ModifySelfservicePermissions
forall x.
ModifySelfservicePermissions -> Rep ModifySelfservicePermissions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep ModifySelfservicePermissions x -> ModifySelfservicePermissions
$cfrom :: forall x.
ModifySelfservicePermissions -> Rep ModifySelfservicePermissions x
Prelude.Generic)

-- |
-- Create a value of 'ModifySelfservicePermissions' 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:
--
-- 'resourceId', 'modifySelfservicePermissions_resourceId' - The identifier of the directory.
--
-- 'selfservicePermissions', 'modifySelfservicePermissions_selfservicePermissions' - The permissions to enable or disable self-service capabilities.
newModifySelfservicePermissions ::
  -- | 'resourceId'
  Prelude.Text ->
  -- | 'selfservicePermissions'
  SelfservicePermissions ->
  ModifySelfservicePermissions
newModifySelfservicePermissions :: Text -> SelfservicePermissions -> ModifySelfservicePermissions
newModifySelfservicePermissions
  Text
pResourceId_
  SelfservicePermissions
pSelfservicePermissions_ =
    ModifySelfservicePermissions'
      { $sel:resourceId:ModifySelfservicePermissions' :: Text
resourceId =
          Text
pResourceId_,
        $sel:selfservicePermissions:ModifySelfservicePermissions' :: SelfservicePermissions
selfservicePermissions =
          SelfservicePermissions
pSelfservicePermissions_
      }

-- | The identifier of the directory.
modifySelfservicePermissions_resourceId :: Lens.Lens' ModifySelfservicePermissions Prelude.Text
modifySelfservicePermissions_resourceId :: Lens' ModifySelfservicePermissions Text
modifySelfservicePermissions_resourceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModifySelfservicePermissions' {Text
resourceId :: Text
$sel:resourceId:ModifySelfservicePermissions' :: ModifySelfservicePermissions -> Text
resourceId} -> Text
resourceId) (\s :: ModifySelfservicePermissions
s@ModifySelfservicePermissions' {} Text
a -> ModifySelfservicePermissions
s {$sel:resourceId:ModifySelfservicePermissions' :: Text
resourceId = Text
a} :: ModifySelfservicePermissions)

-- | The permissions to enable or disable self-service capabilities.
modifySelfservicePermissions_selfservicePermissions :: Lens.Lens' ModifySelfservicePermissions SelfservicePermissions
modifySelfservicePermissions_selfservicePermissions :: Lens' ModifySelfservicePermissions SelfservicePermissions
modifySelfservicePermissions_selfservicePermissions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ModifySelfservicePermissions' {SelfservicePermissions
selfservicePermissions :: SelfservicePermissions
$sel:selfservicePermissions:ModifySelfservicePermissions' :: ModifySelfservicePermissions -> SelfservicePermissions
selfservicePermissions} -> SelfservicePermissions
selfservicePermissions) (\s :: ModifySelfservicePermissions
s@ModifySelfservicePermissions' {} SelfservicePermissions
a -> ModifySelfservicePermissions
s {$sel:selfservicePermissions:ModifySelfservicePermissions' :: SelfservicePermissions
selfservicePermissions = SelfservicePermissions
a} :: ModifySelfservicePermissions)

instance Core.AWSRequest ModifySelfservicePermissions where
  type
    AWSResponse ModifySelfservicePermissions =
      ModifySelfservicePermissionsResponse
  request :: (Service -> Service)
-> ModifySelfservicePermissions
-> Request ModifySelfservicePermissions
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 ModifySelfservicePermissions
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse ModifySelfservicePermissions)))
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 -> ModifySelfservicePermissionsResponse
ModifySelfservicePermissionsResponse'
            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
    ModifySelfservicePermissions
  where
  hashWithSalt :: Int -> ModifySelfservicePermissions -> Int
hashWithSalt Int
_salt ModifySelfservicePermissions' {Text
SelfservicePermissions
selfservicePermissions :: SelfservicePermissions
resourceId :: Text
$sel:selfservicePermissions:ModifySelfservicePermissions' :: ModifySelfservicePermissions -> SelfservicePermissions
$sel:resourceId:ModifySelfservicePermissions' :: ModifySelfservicePermissions -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
resourceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` SelfservicePermissions
selfservicePermissions

instance Prelude.NFData ModifySelfservicePermissions where
  rnf :: ModifySelfservicePermissions -> ()
rnf ModifySelfservicePermissions' {Text
SelfservicePermissions
selfservicePermissions :: SelfservicePermissions
resourceId :: Text
$sel:selfservicePermissions:ModifySelfservicePermissions' :: ModifySelfservicePermissions -> SelfservicePermissions
$sel:resourceId:ModifySelfservicePermissions' :: ModifySelfservicePermissions -> Text
..} =
    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 SelfservicePermissions
selfservicePermissions

instance Data.ToHeaders ModifySelfservicePermissions where
  toHeaders :: ModifySelfservicePermissions -> 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
"WorkspacesService.ModifySelfservicePermissions" ::
                          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 ModifySelfservicePermissions where
  toJSON :: ModifySelfservicePermissions -> Value
toJSON ModifySelfservicePermissions' {Text
SelfservicePermissions
selfservicePermissions :: SelfservicePermissions
resourceId :: Text
$sel:selfservicePermissions:ModifySelfservicePermissions' :: ModifySelfservicePermissions -> SelfservicePermissions
$sel:resourceId:ModifySelfservicePermissions' :: ModifySelfservicePermissions -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"ResourceId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
resourceId),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"SelfservicePermissions"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= SelfservicePermissions
selfservicePermissions
              )
          ]
      )

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

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

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

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

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

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