{-# 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.Nimble.DeleteStudioMember
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Delete a user from studio membership.
module Amazonka.Nimble.DeleteStudioMember
  ( -- * Creating a Request
    DeleteStudioMember (..),
    newDeleteStudioMember,

    -- * Request Lenses
    deleteStudioMember_clientToken,
    deleteStudioMember_principalId,
    deleteStudioMember_studioId,

    -- * Destructuring the Response
    DeleteStudioMemberResponse (..),
    newDeleteStudioMemberResponse,

    -- * Response Lenses
    deleteStudioMemberResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Nimble.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newDeleteStudioMember' smart constructor.
data DeleteStudioMember = DeleteStudioMember'
  { -- | Unique, case-sensitive identifier that you provide to ensure the
    -- idempotency of the request. If you don’t specify a client token, the
    -- Amazon Web Services SDK automatically generates a client token and uses
    -- it for the request to ensure idempotency.
    DeleteStudioMember -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The principal ID. This currently supports a IAM Identity Center UserId.
    DeleteStudioMember -> Text
principalId :: Prelude.Text,
    -- | The studio ID.
    DeleteStudioMember -> Text
studioId :: Prelude.Text
  }
  deriving (DeleteStudioMember -> DeleteStudioMember -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteStudioMember -> DeleteStudioMember -> Bool
$c/= :: DeleteStudioMember -> DeleteStudioMember -> Bool
== :: DeleteStudioMember -> DeleteStudioMember -> Bool
$c== :: DeleteStudioMember -> DeleteStudioMember -> Bool
Prelude.Eq, ReadPrec [DeleteStudioMember]
ReadPrec DeleteStudioMember
Int -> ReadS DeleteStudioMember
ReadS [DeleteStudioMember]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteStudioMember]
$creadListPrec :: ReadPrec [DeleteStudioMember]
readPrec :: ReadPrec DeleteStudioMember
$creadPrec :: ReadPrec DeleteStudioMember
readList :: ReadS [DeleteStudioMember]
$creadList :: ReadS [DeleteStudioMember]
readsPrec :: Int -> ReadS DeleteStudioMember
$creadsPrec :: Int -> ReadS DeleteStudioMember
Prelude.Read, Int -> DeleteStudioMember -> ShowS
[DeleteStudioMember] -> ShowS
DeleteStudioMember -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteStudioMember] -> ShowS
$cshowList :: [DeleteStudioMember] -> ShowS
show :: DeleteStudioMember -> String
$cshow :: DeleteStudioMember -> String
showsPrec :: Int -> DeleteStudioMember -> ShowS
$cshowsPrec :: Int -> DeleteStudioMember -> ShowS
Prelude.Show, forall x. Rep DeleteStudioMember x -> DeleteStudioMember
forall x. DeleteStudioMember -> Rep DeleteStudioMember x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteStudioMember x -> DeleteStudioMember
$cfrom :: forall x. DeleteStudioMember -> Rep DeleteStudioMember x
Prelude.Generic)

-- |
-- Create a value of 'DeleteStudioMember' 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:
--
-- 'clientToken', 'deleteStudioMember_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. If you don’t specify a client token, the
-- Amazon Web Services SDK automatically generates a client token and uses
-- it for the request to ensure idempotency.
--
-- 'principalId', 'deleteStudioMember_principalId' - The principal ID. This currently supports a IAM Identity Center UserId.
--
-- 'studioId', 'deleteStudioMember_studioId' - The studio ID.
newDeleteStudioMember ::
  -- | 'principalId'
  Prelude.Text ->
  -- | 'studioId'
  Prelude.Text ->
  DeleteStudioMember
newDeleteStudioMember :: Text -> Text -> DeleteStudioMember
newDeleteStudioMember Text
pPrincipalId_ Text
pStudioId_ =
  DeleteStudioMember'
    { $sel:clientToken:DeleteStudioMember' :: Maybe Text
clientToken = forall a. Maybe a
Prelude.Nothing,
      $sel:principalId:DeleteStudioMember' :: Text
principalId = Text
pPrincipalId_,
      $sel:studioId:DeleteStudioMember' :: Text
studioId = Text
pStudioId_
    }

-- | Unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. If you don’t specify a client token, the
-- Amazon Web Services SDK automatically generates a client token and uses
-- it for the request to ensure idempotency.
deleteStudioMember_clientToken :: Lens.Lens' DeleteStudioMember (Prelude.Maybe Prelude.Text)
deleteStudioMember_clientToken :: Lens' DeleteStudioMember (Maybe Text)
deleteStudioMember_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteStudioMember' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:DeleteStudioMember' :: DeleteStudioMember -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: DeleteStudioMember
s@DeleteStudioMember' {} Maybe Text
a -> DeleteStudioMember
s {$sel:clientToken:DeleteStudioMember' :: Maybe Text
clientToken = Maybe Text
a} :: DeleteStudioMember)

-- | The principal ID. This currently supports a IAM Identity Center UserId.
deleteStudioMember_principalId :: Lens.Lens' DeleteStudioMember Prelude.Text
deleteStudioMember_principalId :: Lens' DeleteStudioMember Text
deleteStudioMember_principalId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteStudioMember' {Text
principalId :: Text
$sel:principalId:DeleteStudioMember' :: DeleteStudioMember -> Text
principalId} -> Text
principalId) (\s :: DeleteStudioMember
s@DeleteStudioMember' {} Text
a -> DeleteStudioMember
s {$sel:principalId:DeleteStudioMember' :: Text
principalId = Text
a} :: DeleteStudioMember)

-- | The studio ID.
deleteStudioMember_studioId :: Lens.Lens' DeleteStudioMember Prelude.Text
deleteStudioMember_studioId :: Lens' DeleteStudioMember Text
deleteStudioMember_studioId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteStudioMember' {Text
studioId :: Text
$sel:studioId:DeleteStudioMember' :: DeleteStudioMember -> Text
studioId} -> Text
studioId) (\s :: DeleteStudioMember
s@DeleteStudioMember' {} Text
a -> DeleteStudioMember
s {$sel:studioId:DeleteStudioMember' :: Text
studioId = Text
a} :: DeleteStudioMember)

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

instance Prelude.NFData DeleteStudioMember where
  rnf :: DeleteStudioMember -> ()
rnf DeleteStudioMember' {Maybe Text
Text
studioId :: Text
principalId :: Text
clientToken :: Maybe Text
$sel:studioId:DeleteStudioMember' :: DeleteStudioMember -> Text
$sel:principalId:DeleteStudioMember' :: DeleteStudioMember -> Text
$sel:clientToken:DeleteStudioMember' :: DeleteStudioMember -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
principalId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
studioId

instance Data.ToHeaders DeleteStudioMember where
  toHeaders :: DeleteStudioMember -> ResponseHeaders
toHeaders DeleteStudioMember' {Maybe Text
Text
studioId :: Text
principalId :: Text
clientToken :: Maybe Text
$sel:studioId:DeleteStudioMember' :: DeleteStudioMember -> Text
$sel:principalId:DeleteStudioMember' :: DeleteStudioMember -> Text
$sel:clientToken:DeleteStudioMember' :: DeleteStudioMember -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ HeaderName
"X-Amz-Client-Token" forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# Maybe Text
clientToken,
        HeaderName
"Content-Type"
          forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# (ByteString
"application/x-amz-json-1.1" :: Prelude.ByteString)
      ]

instance Data.ToPath DeleteStudioMember where
  toPath :: DeleteStudioMember -> ByteString
toPath DeleteStudioMember' {Maybe Text
Text
studioId :: Text
principalId :: Text
clientToken :: Maybe Text
$sel:studioId:DeleteStudioMember' :: DeleteStudioMember -> Text
$sel:principalId:DeleteStudioMember' :: DeleteStudioMember -> Text
$sel:clientToken:DeleteStudioMember' :: DeleteStudioMember -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/2020-08-01/studios/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
studioId,
        ByteString
"/membership/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
principalId
      ]

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

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

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

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

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