packages feed

amazonka-chime-2.0: gen/Amazonka/Chime/Types/RoomMembership.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# 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.Types.RoomMembership
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Chime.Types.RoomMembership where

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

-- | The room membership details.
--
-- /See:/ 'newRoomMembership' smart constructor.
data RoomMembership = RoomMembership'
  { -- | The identifier of the user that invited the room member.
    invitedBy :: Prelude.Maybe Prelude.Text,
    member :: Prelude.Maybe Member,
    -- | The membership role.
    role' :: Prelude.Maybe RoomMembershipRole,
    -- | The room ID.
    roomId :: Prelude.Maybe Prelude.Text,
    -- | The room membership update timestamp, in ISO 8601 format.
    updatedTimestamp :: Prelude.Maybe Data.ISO8601
  }
  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'RoomMembership' 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:
--
-- 'invitedBy', 'roomMembership_invitedBy' - The identifier of the user that invited the room member.
--
-- 'member', 'roomMembership_member' - Undocumented member.
--
-- 'role'', 'roomMembership_role' - The membership role.
--
-- 'roomId', 'roomMembership_roomId' - The room ID.
--
-- 'updatedTimestamp', 'roomMembership_updatedTimestamp' - The room membership update timestamp, in ISO 8601 format.
newRoomMembership ::
  RoomMembership
newRoomMembership =
  RoomMembership'
    { invitedBy = Prelude.Nothing,
      member = Prelude.Nothing,
      role' = Prelude.Nothing,
      roomId = Prelude.Nothing,
      updatedTimestamp = Prelude.Nothing
    }

-- | The identifier of the user that invited the room member.
roomMembership_invitedBy :: Lens.Lens' RoomMembership (Prelude.Maybe Prelude.Text)
roomMembership_invitedBy = Lens.lens (\RoomMembership' {invitedBy} -> invitedBy) (\s@RoomMembership' {} a -> s {invitedBy = a} :: RoomMembership)

-- | Undocumented member.
roomMembership_member :: Lens.Lens' RoomMembership (Prelude.Maybe Member)
roomMembership_member = Lens.lens (\RoomMembership' {member} -> member) (\s@RoomMembership' {} a -> s {member = a} :: RoomMembership)

-- | The membership role.
roomMembership_role :: Lens.Lens' RoomMembership (Prelude.Maybe RoomMembershipRole)
roomMembership_role = Lens.lens (\RoomMembership' {role'} -> role') (\s@RoomMembership' {} a -> s {role' = a} :: RoomMembership)

-- | The room ID.
roomMembership_roomId :: Lens.Lens' RoomMembership (Prelude.Maybe Prelude.Text)
roomMembership_roomId = Lens.lens (\RoomMembership' {roomId} -> roomId) (\s@RoomMembership' {} a -> s {roomId = a} :: RoomMembership)

-- | The room membership update timestamp, in ISO 8601 format.
roomMembership_updatedTimestamp :: Lens.Lens' RoomMembership (Prelude.Maybe Prelude.UTCTime)
roomMembership_updatedTimestamp = Lens.lens (\RoomMembership' {updatedTimestamp} -> updatedTimestamp) (\s@RoomMembership' {} a -> s {updatedTimestamp = a} :: RoomMembership) Prelude.. Lens.mapping Data._Time

instance Data.FromJSON RoomMembership where
  parseJSON =
    Data.withObject
      "RoomMembership"
      ( \x ->
          RoomMembership'
            Prelude.<$> (x Data..:? "InvitedBy")
            Prelude.<*> (x Data..:? "Member")
            Prelude.<*> (x Data..:? "Role")
            Prelude.<*> (x Data..:? "RoomId")
            Prelude.<*> (x Data..:? "UpdatedTimestamp")
      )

instance Prelude.Hashable RoomMembership where
  hashWithSalt _salt RoomMembership' {..} =
    _salt
      `Prelude.hashWithSalt` invitedBy
      `Prelude.hashWithSalt` member
      `Prelude.hashWithSalt` role'
      `Prelude.hashWithSalt` roomId
      `Prelude.hashWithSalt` updatedTimestamp

instance Prelude.NFData RoomMembership where
  rnf RoomMembership' {..} =
    Prelude.rnf invitedBy
      `Prelude.seq` Prelude.rnf member
      `Prelude.seq` Prelude.rnf role'
      `Prelude.seq` Prelude.rnf roomId
      `Prelude.seq` Prelude.rnf updatedTimestamp