{-# 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.Chime.UpdateRoomMembership
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates room membership details, such as the member role, for a room in
-- an Amazon Chime Enterprise account. The member role designates whether
-- the member is a chat room administrator or a general chat room member.
-- The member role can be updated only for user IDs.
module Amazonka.Chime.UpdateRoomMembership
  ( -- * Creating a Request
    UpdateRoomMembership (..),
    newUpdateRoomMembership,

    -- * Request Lenses
    updateRoomMembership_role,
    updateRoomMembership_accountId,
    updateRoomMembership_roomId,
    updateRoomMembership_memberId,

    -- * Destructuring the Response
    UpdateRoomMembershipResponse (..),
    newUpdateRoomMembershipResponse,

    -- * Response Lenses
    updateRoomMembershipResponse_roomMembership,
    updateRoomMembershipResponse_httpStatus,
  )
where

import Amazonka.Chime.Types
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

-- | /See:/ 'newUpdateRoomMembership' smart constructor.
data UpdateRoomMembership = UpdateRoomMembership'
  { -- | The role of the member.
    UpdateRoomMembership -> Maybe RoomMembershipRole
role' :: Prelude.Maybe RoomMembershipRole,
    -- | The Amazon Chime account ID.
    UpdateRoomMembership -> Text
accountId :: Prelude.Text,
    -- | The room ID.
    UpdateRoomMembership -> Text
roomId :: Prelude.Text,
    -- | The member ID.
    UpdateRoomMembership -> Text
memberId :: Prelude.Text
  }
  deriving (UpdateRoomMembership -> UpdateRoomMembership -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateRoomMembership -> UpdateRoomMembership -> Bool
$c/= :: UpdateRoomMembership -> UpdateRoomMembership -> Bool
== :: UpdateRoomMembership -> UpdateRoomMembership -> Bool
$c== :: UpdateRoomMembership -> UpdateRoomMembership -> Bool
Prelude.Eq, ReadPrec [UpdateRoomMembership]
ReadPrec UpdateRoomMembership
Int -> ReadS UpdateRoomMembership
ReadS [UpdateRoomMembership]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateRoomMembership]
$creadListPrec :: ReadPrec [UpdateRoomMembership]
readPrec :: ReadPrec UpdateRoomMembership
$creadPrec :: ReadPrec UpdateRoomMembership
readList :: ReadS [UpdateRoomMembership]
$creadList :: ReadS [UpdateRoomMembership]
readsPrec :: Int -> ReadS UpdateRoomMembership
$creadsPrec :: Int -> ReadS UpdateRoomMembership
Prelude.Read, Int -> UpdateRoomMembership -> ShowS
[UpdateRoomMembership] -> ShowS
UpdateRoomMembership -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateRoomMembership] -> ShowS
$cshowList :: [UpdateRoomMembership] -> ShowS
show :: UpdateRoomMembership -> String
$cshow :: UpdateRoomMembership -> String
showsPrec :: Int -> UpdateRoomMembership -> ShowS
$cshowsPrec :: Int -> UpdateRoomMembership -> ShowS
Prelude.Show, forall x. Rep UpdateRoomMembership x -> UpdateRoomMembership
forall x. UpdateRoomMembership -> Rep UpdateRoomMembership x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateRoomMembership x -> UpdateRoomMembership
$cfrom :: forall x. UpdateRoomMembership -> Rep UpdateRoomMembership x
Prelude.Generic)

-- |
-- Create a value of 'UpdateRoomMembership' 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:
--
-- 'role'', 'updateRoomMembership_role' - The role of the member.
--
-- 'accountId', 'updateRoomMembership_accountId' - The Amazon Chime account ID.
--
-- 'roomId', 'updateRoomMembership_roomId' - The room ID.
--
-- 'memberId', 'updateRoomMembership_memberId' - The member ID.
newUpdateRoomMembership ::
  -- | 'accountId'
  Prelude.Text ->
  -- | 'roomId'
  Prelude.Text ->
  -- | 'memberId'
  Prelude.Text ->
  UpdateRoomMembership
newUpdateRoomMembership :: Text -> Text -> Text -> UpdateRoomMembership
newUpdateRoomMembership
  Text
pAccountId_
  Text
pRoomId_
  Text
pMemberId_ =
    UpdateRoomMembership'
      { $sel:role':UpdateRoomMembership' :: Maybe RoomMembershipRole
role' = forall a. Maybe a
Prelude.Nothing,
        $sel:accountId:UpdateRoomMembership' :: Text
accountId = Text
pAccountId_,
        $sel:roomId:UpdateRoomMembership' :: Text
roomId = Text
pRoomId_,
        $sel:memberId:UpdateRoomMembership' :: Text
memberId = Text
pMemberId_
      }

-- | The role of the member.
updateRoomMembership_role :: Lens.Lens' UpdateRoomMembership (Prelude.Maybe RoomMembershipRole)
updateRoomMembership_role :: Lens' UpdateRoomMembership (Maybe RoomMembershipRole)
updateRoomMembership_role = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateRoomMembership' {Maybe RoomMembershipRole
role' :: Maybe RoomMembershipRole
$sel:role':UpdateRoomMembership' :: UpdateRoomMembership -> Maybe RoomMembershipRole
role'} -> Maybe RoomMembershipRole
role') (\s :: UpdateRoomMembership
s@UpdateRoomMembership' {} Maybe RoomMembershipRole
a -> UpdateRoomMembership
s {$sel:role':UpdateRoomMembership' :: Maybe RoomMembershipRole
role' = Maybe RoomMembershipRole
a} :: UpdateRoomMembership)

-- | The Amazon Chime account ID.
updateRoomMembership_accountId :: Lens.Lens' UpdateRoomMembership Prelude.Text
updateRoomMembership_accountId :: Lens' UpdateRoomMembership Text
updateRoomMembership_accountId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateRoomMembership' {Text
accountId :: Text
$sel:accountId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
accountId} -> Text
accountId) (\s :: UpdateRoomMembership
s@UpdateRoomMembership' {} Text
a -> UpdateRoomMembership
s {$sel:accountId:UpdateRoomMembership' :: Text
accountId = Text
a} :: UpdateRoomMembership)

-- | The room ID.
updateRoomMembership_roomId :: Lens.Lens' UpdateRoomMembership Prelude.Text
updateRoomMembership_roomId :: Lens' UpdateRoomMembership Text
updateRoomMembership_roomId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateRoomMembership' {Text
roomId :: Text
$sel:roomId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
roomId} -> Text
roomId) (\s :: UpdateRoomMembership
s@UpdateRoomMembership' {} Text
a -> UpdateRoomMembership
s {$sel:roomId:UpdateRoomMembership' :: Text
roomId = Text
a} :: UpdateRoomMembership)

-- | The member ID.
updateRoomMembership_memberId :: Lens.Lens' UpdateRoomMembership Prelude.Text
updateRoomMembership_memberId :: Lens' UpdateRoomMembership Text
updateRoomMembership_memberId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateRoomMembership' {Text
memberId :: Text
$sel:memberId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
memberId} -> Text
memberId) (\s :: UpdateRoomMembership
s@UpdateRoomMembership' {} Text
a -> UpdateRoomMembership
s {$sel:memberId:UpdateRoomMembership' :: Text
memberId = Text
a} :: UpdateRoomMembership)

instance Core.AWSRequest UpdateRoomMembership where
  type
    AWSResponse UpdateRoomMembership =
      UpdateRoomMembershipResponse
  request :: (Service -> Service)
-> UpdateRoomMembership -> Request UpdateRoomMembership
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 UpdateRoomMembership
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateRoomMembership)))
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 RoomMembership -> Int -> UpdateRoomMembershipResponse
UpdateRoomMembershipResponse'
            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
"RoomMembership")
            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 UpdateRoomMembership where
  hashWithSalt :: Int -> UpdateRoomMembership -> Int
hashWithSalt Int
_salt UpdateRoomMembership' {Maybe RoomMembershipRole
Text
memberId :: Text
roomId :: Text
accountId :: Text
role' :: Maybe RoomMembershipRole
$sel:memberId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:roomId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:accountId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:role':UpdateRoomMembership' :: UpdateRoomMembership -> Maybe RoomMembershipRole
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RoomMembershipRole
role'
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
accountId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
roomId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
memberId

instance Prelude.NFData UpdateRoomMembership where
  rnf :: UpdateRoomMembership -> ()
rnf UpdateRoomMembership' {Maybe RoomMembershipRole
Text
memberId :: Text
roomId :: Text
accountId :: Text
role' :: Maybe RoomMembershipRole
$sel:memberId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:roomId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:accountId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:role':UpdateRoomMembership' :: UpdateRoomMembership -> Maybe RoomMembershipRole
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe RoomMembershipRole
role'
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
accountId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
roomId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
memberId

instance Data.ToHeaders UpdateRoomMembership where
  toHeaders :: UpdateRoomMembership -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToJSON UpdateRoomMembership where
  toJSON :: UpdateRoomMembership -> Value
toJSON UpdateRoomMembership' {Maybe RoomMembershipRole
Text
memberId :: Text
roomId :: Text
accountId :: Text
role' :: Maybe RoomMembershipRole
$sel:memberId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:roomId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:accountId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:role':UpdateRoomMembership' :: UpdateRoomMembership -> Maybe RoomMembershipRole
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [(Key
"Role" 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 RoomMembershipRole
role']
      )

instance Data.ToPath UpdateRoomMembership where
  toPath :: UpdateRoomMembership -> ByteString
toPath UpdateRoomMembership' {Maybe RoomMembershipRole
Text
memberId :: Text
roomId :: Text
accountId :: Text
role' :: Maybe RoomMembershipRole
$sel:memberId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:roomId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:accountId:UpdateRoomMembership' :: UpdateRoomMembership -> Text
$sel:role':UpdateRoomMembership' :: UpdateRoomMembership -> Maybe RoomMembershipRole
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/accounts/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
accountId,
        ByteString
"/rooms/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
roomId,
        ByteString
"/memberships/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
memberId
      ]

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

-- | /See:/ 'newUpdateRoomMembershipResponse' smart constructor.
data UpdateRoomMembershipResponse = UpdateRoomMembershipResponse'
  { -- | The room membership details.
    UpdateRoomMembershipResponse -> Maybe RoomMembership
roomMembership :: Prelude.Maybe RoomMembership,
    -- | The response's http status code.
    UpdateRoomMembershipResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (UpdateRoomMembershipResponse
-> UpdateRoomMembershipResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateRoomMembershipResponse
-> UpdateRoomMembershipResponse -> Bool
$c/= :: UpdateRoomMembershipResponse
-> UpdateRoomMembershipResponse -> Bool
== :: UpdateRoomMembershipResponse
-> UpdateRoomMembershipResponse -> Bool
$c== :: UpdateRoomMembershipResponse
-> UpdateRoomMembershipResponse -> Bool
Prelude.Eq, Int -> UpdateRoomMembershipResponse -> ShowS
[UpdateRoomMembershipResponse] -> ShowS
UpdateRoomMembershipResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateRoomMembershipResponse] -> ShowS
$cshowList :: [UpdateRoomMembershipResponse] -> ShowS
show :: UpdateRoomMembershipResponse -> String
$cshow :: UpdateRoomMembershipResponse -> String
showsPrec :: Int -> UpdateRoomMembershipResponse -> ShowS
$cshowsPrec :: Int -> UpdateRoomMembershipResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateRoomMembershipResponse x -> UpdateRoomMembershipResponse
forall x.
UpdateRoomMembershipResponse -> Rep UpdateRoomMembershipResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateRoomMembershipResponse x -> UpdateRoomMembershipResponse
$cfrom :: forall x.
UpdateRoomMembershipResponse -> Rep UpdateRoomMembershipResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateRoomMembershipResponse' 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:
--
-- 'roomMembership', 'updateRoomMembershipResponse_roomMembership' - The room membership details.
--
-- 'httpStatus', 'updateRoomMembershipResponse_httpStatus' - The response's http status code.
newUpdateRoomMembershipResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateRoomMembershipResponse
newUpdateRoomMembershipResponse :: Int -> UpdateRoomMembershipResponse
newUpdateRoomMembershipResponse Int
pHttpStatus_ =
  UpdateRoomMembershipResponse'
    { $sel:roomMembership:UpdateRoomMembershipResponse' :: Maybe RoomMembership
roomMembership =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:UpdateRoomMembershipResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The room membership details.
updateRoomMembershipResponse_roomMembership :: Lens.Lens' UpdateRoomMembershipResponse (Prelude.Maybe RoomMembership)
updateRoomMembershipResponse_roomMembership :: Lens' UpdateRoomMembershipResponse (Maybe RoomMembership)
updateRoomMembershipResponse_roomMembership = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateRoomMembershipResponse' {Maybe RoomMembership
roomMembership :: Maybe RoomMembership
$sel:roomMembership:UpdateRoomMembershipResponse' :: UpdateRoomMembershipResponse -> Maybe RoomMembership
roomMembership} -> Maybe RoomMembership
roomMembership) (\s :: UpdateRoomMembershipResponse
s@UpdateRoomMembershipResponse' {} Maybe RoomMembership
a -> UpdateRoomMembershipResponse
s {$sel:roomMembership:UpdateRoomMembershipResponse' :: Maybe RoomMembership
roomMembership = Maybe RoomMembership
a} :: UpdateRoomMembershipResponse)

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

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