{-# 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.UpdateUserRequestItem
-- 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.UpdateUserRequestItem where

import Amazonka.Chime.Types.AlexaForBusinessMetadata
import Amazonka.Chime.Types.License
import Amazonka.Chime.Types.UserType
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 user ID and user fields to update, used with the BatchUpdateUser
-- action.
--
-- /See:/ 'newUpdateUserRequestItem' smart constructor.
data UpdateUserRequestItem = UpdateUserRequestItem'
  { -- | The Alexa for Business metadata.
    UpdateUserRequestItem -> Maybe AlexaForBusinessMetadata
alexaForBusinessMetadata :: Prelude.Maybe AlexaForBusinessMetadata,
    -- | The user license type.
    UpdateUserRequestItem -> Maybe License
licenseType :: Prelude.Maybe License,
    -- | The user type.
    UpdateUserRequestItem -> Maybe UserType
userType :: Prelude.Maybe UserType,
    -- | The user ID.
    UpdateUserRequestItem -> Text
userId :: Prelude.Text
  }
  deriving (UpdateUserRequestItem -> UpdateUserRequestItem -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateUserRequestItem -> UpdateUserRequestItem -> Bool
$c/= :: UpdateUserRequestItem -> UpdateUserRequestItem -> Bool
== :: UpdateUserRequestItem -> UpdateUserRequestItem -> Bool
$c== :: UpdateUserRequestItem -> UpdateUserRequestItem -> Bool
Prelude.Eq, Int -> UpdateUserRequestItem -> ShowS
[UpdateUserRequestItem] -> ShowS
UpdateUserRequestItem -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateUserRequestItem] -> ShowS
$cshowList :: [UpdateUserRequestItem] -> ShowS
show :: UpdateUserRequestItem -> String
$cshow :: UpdateUserRequestItem -> String
showsPrec :: Int -> UpdateUserRequestItem -> ShowS
$cshowsPrec :: Int -> UpdateUserRequestItem -> ShowS
Prelude.Show, forall x. Rep UpdateUserRequestItem x -> UpdateUserRequestItem
forall x. UpdateUserRequestItem -> Rep UpdateUserRequestItem x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateUserRequestItem x -> UpdateUserRequestItem
$cfrom :: forall x. UpdateUserRequestItem -> Rep UpdateUserRequestItem x
Prelude.Generic)

-- |
-- Create a value of 'UpdateUserRequestItem' 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:
--
-- 'alexaForBusinessMetadata', 'updateUserRequestItem_alexaForBusinessMetadata' - The Alexa for Business metadata.
--
-- 'licenseType', 'updateUserRequestItem_licenseType' - The user license type.
--
-- 'userType', 'updateUserRequestItem_userType' - The user type.
--
-- 'userId', 'updateUserRequestItem_userId' - The user ID.
newUpdateUserRequestItem ::
  -- | 'userId'
  Prelude.Text ->
  UpdateUserRequestItem
newUpdateUserRequestItem :: Text -> UpdateUserRequestItem
newUpdateUserRequestItem Text
pUserId_ =
  UpdateUserRequestItem'
    { $sel:alexaForBusinessMetadata:UpdateUserRequestItem' :: Maybe AlexaForBusinessMetadata
alexaForBusinessMetadata =
        forall a. Maybe a
Prelude.Nothing,
      $sel:licenseType:UpdateUserRequestItem' :: Maybe License
licenseType = forall a. Maybe a
Prelude.Nothing,
      $sel:userType:UpdateUserRequestItem' :: Maybe UserType
userType = forall a. Maybe a
Prelude.Nothing,
      $sel:userId:UpdateUserRequestItem' :: Text
userId = Text
pUserId_
    }

-- | The Alexa for Business metadata.
updateUserRequestItem_alexaForBusinessMetadata :: Lens.Lens' UpdateUserRequestItem (Prelude.Maybe AlexaForBusinessMetadata)
updateUserRequestItem_alexaForBusinessMetadata :: Lens' UpdateUserRequestItem (Maybe AlexaForBusinessMetadata)
updateUserRequestItem_alexaForBusinessMetadata = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateUserRequestItem' {Maybe AlexaForBusinessMetadata
alexaForBusinessMetadata :: Maybe AlexaForBusinessMetadata
$sel:alexaForBusinessMetadata:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe AlexaForBusinessMetadata
alexaForBusinessMetadata} -> Maybe AlexaForBusinessMetadata
alexaForBusinessMetadata) (\s :: UpdateUserRequestItem
s@UpdateUserRequestItem' {} Maybe AlexaForBusinessMetadata
a -> UpdateUserRequestItem
s {$sel:alexaForBusinessMetadata:UpdateUserRequestItem' :: Maybe AlexaForBusinessMetadata
alexaForBusinessMetadata = Maybe AlexaForBusinessMetadata
a} :: UpdateUserRequestItem)

-- | The user license type.
updateUserRequestItem_licenseType :: Lens.Lens' UpdateUserRequestItem (Prelude.Maybe License)
updateUserRequestItem_licenseType :: Lens' UpdateUserRequestItem (Maybe License)
updateUserRequestItem_licenseType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateUserRequestItem' {Maybe License
licenseType :: Maybe License
$sel:licenseType:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe License
licenseType} -> Maybe License
licenseType) (\s :: UpdateUserRequestItem
s@UpdateUserRequestItem' {} Maybe License
a -> UpdateUserRequestItem
s {$sel:licenseType:UpdateUserRequestItem' :: Maybe License
licenseType = Maybe License
a} :: UpdateUserRequestItem)

-- | The user type.
updateUserRequestItem_userType :: Lens.Lens' UpdateUserRequestItem (Prelude.Maybe UserType)
updateUserRequestItem_userType :: Lens' UpdateUserRequestItem (Maybe UserType)
updateUserRequestItem_userType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateUserRequestItem' {Maybe UserType
userType :: Maybe UserType
$sel:userType:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe UserType
userType} -> Maybe UserType
userType) (\s :: UpdateUserRequestItem
s@UpdateUserRequestItem' {} Maybe UserType
a -> UpdateUserRequestItem
s {$sel:userType:UpdateUserRequestItem' :: Maybe UserType
userType = Maybe UserType
a} :: UpdateUserRequestItem)

-- | The user ID.
updateUserRequestItem_userId :: Lens.Lens' UpdateUserRequestItem Prelude.Text
updateUserRequestItem_userId :: Lens' UpdateUserRequestItem Text
updateUserRequestItem_userId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateUserRequestItem' {Text
userId :: Text
$sel:userId:UpdateUserRequestItem' :: UpdateUserRequestItem -> Text
userId} -> Text
userId) (\s :: UpdateUserRequestItem
s@UpdateUserRequestItem' {} Text
a -> UpdateUserRequestItem
s {$sel:userId:UpdateUserRequestItem' :: Text
userId = Text
a} :: UpdateUserRequestItem)

instance Prelude.Hashable UpdateUserRequestItem where
  hashWithSalt :: Int -> UpdateUserRequestItem -> Int
hashWithSalt Int
_salt UpdateUserRequestItem' {Maybe AlexaForBusinessMetadata
Maybe License
Maybe UserType
Text
userId :: Text
userType :: Maybe UserType
licenseType :: Maybe License
alexaForBusinessMetadata :: Maybe AlexaForBusinessMetadata
$sel:userId:UpdateUserRequestItem' :: UpdateUserRequestItem -> Text
$sel:userType:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe UserType
$sel:licenseType:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe License
$sel:alexaForBusinessMetadata:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe AlexaForBusinessMetadata
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AlexaForBusinessMetadata
alexaForBusinessMetadata
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe License
licenseType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe UserType
userType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
userId

instance Prelude.NFData UpdateUserRequestItem where
  rnf :: UpdateUserRequestItem -> ()
rnf UpdateUserRequestItem' {Maybe AlexaForBusinessMetadata
Maybe License
Maybe UserType
Text
userId :: Text
userType :: Maybe UserType
licenseType :: Maybe License
alexaForBusinessMetadata :: Maybe AlexaForBusinessMetadata
$sel:userId:UpdateUserRequestItem' :: UpdateUserRequestItem -> Text
$sel:userType:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe UserType
$sel:licenseType:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe License
$sel:alexaForBusinessMetadata:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe AlexaForBusinessMetadata
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AlexaForBusinessMetadata
alexaForBusinessMetadata
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe License
licenseType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe UserType
userType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
userId

instance Data.ToJSON UpdateUserRequestItem where
  toJSON :: UpdateUserRequestItem -> Value
toJSON UpdateUserRequestItem' {Maybe AlexaForBusinessMetadata
Maybe License
Maybe UserType
Text
userId :: Text
userType :: Maybe UserType
licenseType :: Maybe License
alexaForBusinessMetadata :: Maybe AlexaForBusinessMetadata
$sel:userId:UpdateUserRequestItem' :: UpdateUserRequestItem -> Text
$sel:userType:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe UserType
$sel:licenseType:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe License
$sel:alexaForBusinessMetadata:UpdateUserRequestItem' :: UpdateUserRequestItem -> Maybe AlexaForBusinessMetadata
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AlexaForBusinessMetadata" 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 AlexaForBusinessMetadata
alexaForBusinessMetadata,
            (Key
"LicenseType" 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 License
licenseType,
            (Key
"UserType" 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 UserType
userType,
            forall a. a -> Maybe a
Prelude.Just (Key
"UserId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
userId)
          ]
      )