{-# 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.AlexaBusiness.PutRoomSkillParameter
-- 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 skill parameter details by room, skill, and parameter key
-- ID. Not all skills have a room skill parameter.
module Amazonka.AlexaBusiness.PutRoomSkillParameter
  ( -- * Creating a Request
    PutRoomSkillParameter (..),
    newPutRoomSkillParameter,

    -- * Request Lenses
    putRoomSkillParameter_roomArn,
    putRoomSkillParameter_skillId,
    putRoomSkillParameter_roomSkillParameter,

    -- * Destructuring the Response
    PutRoomSkillParameterResponse (..),
    newPutRoomSkillParameterResponse,

    -- * Response Lenses
    putRoomSkillParameterResponse_httpStatus,
  )
where

import Amazonka.AlexaBusiness.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:/ 'newPutRoomSkillParameter' smart constructor.
data PutRoomSkillParameter = PutRoomSkillParameter'
  { -- | The ARN of the room associated with the room skill parameter. Required.
    PutRoomSkillParameter -> Maybe Text
roomArn :: Prelude.Maybe Prelude.Text,
    -- | The ARN of the skill associated with the room skill parameter. Required.
    PutRoomSkillParameter -> Text
skillId :: Prelude.Text,
    -- | The updated room skill parameter. Required.
    PutRoomSkillParameter -> RoomSkillParameter
roomSkillParameter :: RoomSkillParameter
  }
  deriving (PutRoomSkillParameter -> PutRoomSkillParameter -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PutRoomSkillParameter -> PutRoomSkillParameter -> Bool
$c/= :: PutRoomSkillParameter -> PutRoomSkillParameter -> Bool
== :: PutRoomSkillParameter -> PutRoomSkillParameter -> Bool
$c== :: PutRoomSkillParameter -> PutRoomSkillParameter -> Bool
Prelude.Eq, ReadPrec [PutRoomSkillParameter]
ReadPrec PutRoomSkillParameter
Int -> ReadS PutRoomSkillParameter
ReadS [PutRoomSkillParameter]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PutRoomSkillParameter]
$creadListPrec :: ReadPrec [PutRoomSkillParameter]
readPrec :: ReadPrec PutRoomSkillParameter
$creadPrec :: ReadPrec PutRoomSkillParameter
readList :: ReadS [PutRoomSkillParameter]
$creadList :: ReadS [PutRoomSkillParameter]
readsPrec :: Int -> ReadS PutRoomSkillParameter
$creadsPrec :: Int -> ReadS PutRoomSkillParameter
Prelude.Read, Int -> PutRoomSkillParameter -> ShowS
[PutRoomSkillParameter] -> ShowS
PutRoomSkillParameter -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PutRoomSkillParameter] -> ShowS
$cshowList :: [PutRoomSkillParameter] -> ShowS
show :: PutRoomSkillParameter -> String
$cshow :: PutRoomSkillParameter -> String
showsPrec :: Int -> PutRoomSkillParameter -> ShowS
$cshowsPrec :: Int -> PutRoomSkillParameter -> ShowS
Prelude.Show, forall x. Rep PutRoomSkillParameter x -> PutRoomSkillParameter
forall x. PutRoomSkillParameter -> Rep PutRoomSkillParameter x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PutRoomSkillParameter x -> PutRoomSkillParameter
$cfrom :: forall x. PutRoomSkillParameter -> Rep PutRoomSkillParameter x
Prelude.Generic)

-- |
-- Create a value of 'PutRoomSkillParameter' 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:
--
-- 'roomArn', 'putRoomSkillParameter_roomArn' - The ARN of the room associated with the room skill parameter. Required.
--
-- 'skillId', 'putRoomSkillParameter_skillId' - The ARN of the skill associated with the room skill parameter. Required.
--
-- 'roomSkillParameter', 'putRoomSkillParameter_roomSkillParameter' - The updated room skill parameter. Required.
newPutRoomSkillParameter ::
  -- | 'skillId'
  Prelude.Text ->
  -- | 'roomSkillParameter'
  RoomSkillParameter ->
  PutRoomSkillParameter
newPutRoomSkillParameter :: Text -> RoomSkillParameter -> PutRoomSkillParameter
newPutRoomSkillParameter
  Text
pSkillId_
  RoomSkillParameter
pRoomSkillParameter_ =
    PutRoomSkillParameter'
      { $sel:roomArn:PutRoomSkillParameter' :: Maybe Text
roomArn = forall a. Maybe a
Prelude.Nothing,
        $sel:skillId:PutRoomSkillParameter' :: Text
skillId = Text
pSkillId_,
        $sel:roomSkillParameter:PutRoomSkillParameter' :: RoomSkillParameter
roomSkillParameter = RoomSkillParameter
pRoomSkillParameter_
      }

-- | The ARN of the room associated with the room skill parameter. Required.
putRoomSkillParameter_roomArn :: Lens.Lens' PutRoomSkillParameter (Prelude.Maybe Prelude.Text)
putRoomSkillParameter_roomArn :: Lens' PutRoomSkillParameter (Maybe Text)
putRoomSkillParameter_roomArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutRoomSkillParameter' {Maybe Text
roomArn :: Maybe Text
$sel:roomArn:PutRoomSkillParameter' :: PutRoomSkillParameter -> Maybe Text
roomArn} -> Maybe Text
roomArn) (\s :: PutRoomSkillParameter
s@PutRoomSkillParameter' {} Maybe Text
a -> PutRoomSkillParameter
s {$sel:roomArn:PutRoomSkillParameter' :: Maybe Text
roomArn = Maybe Text
a} :: PutRoomSkillParameter)

-- | The ARN of the skill associated with the room skill parameter. Required.
putRoomSkillParameter_skillId :: Lens.Lens' PutRoomSkillParameter Prelude.Text
putRoomSkillParameter_skillId :: Lens' PutRoomSkillParameter Text
putRoomSkillParameter_skillId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutRoomSkillParameter' {Text
skillId :: Text
$sel:skillId:PutRoomSkillParameter' :: PutRoomSkillParameter -> Text
skillId} -> Text
skillId) (\s :: PutRoomSkillParameter
s@PutRoomSkillParameter' {} Text
a -> PutRoomSkillParameter
s {$sel:skillId:PutRoomSkillParameter' :: Text
skillId = Text
a} :: PutRoomSkillParameter)

-- | The updated room skill parameter. Required.
putRoomSkillParameter_roomSkillParameter :: Lens.Lens' PutRoomSkillParameter RoomSkillParameter
putRoomSkillParameter_roomSkillParameter :: Lens' PutRoomSkillParameter RoomSkillParameter
putRoomSkillParameter_roomSkillParameter = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutRoomSkillParameter' {RoomSkillParameter
roomSkillParameter :: RoomSkillParameter
$sel:roomSkillParameter:PutRoomSkillParameter' :: PutRoomSkillParameter -> RoomSkillParameter
roomSkillParameter} -> RoomSkillParameter
roomSkillParameter) (\s :: PutRoomSkillParameter
s@PutRoomSkillParameter' {} RoomSkillParameter
a -> PutRoomSkillParameter
s {$sel:roomSkillParameter:PutRoomSkillParameter' :: RoomSkillParameter
roomSkillParameter = RoomSkillParameter
a} :: PutRoomSkillParameter)

instance Core.AWSRequest PutRoomSkillParameter where
  type
    AWSResponse PutRoomSkillParameter =
      PutRoomSkillParameterResponse
  request :: (Service -> Service)
-> PutRoomSkillParameter -> Request PutRoomSkillParameter
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 PutRoomSkillParameter
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse PutRoomSkillParameter)))
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 -> PutRoomSkillParameterResponse
PutRoomSkillParameterResponse'
            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 PutRoomSkillParameter where
  hashWithSalt :: Int -> PutRoomSkillParameter -> Int
hashWithSalt Int
_salt PutRoomSkillParameter' {Maybe Text
Text
RoomSkillParameter
roomSkillParameter :: RoomSkillParameter
skillId :: Text
roomArn :: Maybe Text
$sel:roomSkillParameter:PutRoomSkillParameter' :: PutRoomSkillParameter -> RoomSkillParameter
$sel:skillId:PutRoomSkillParameter' :: PutRoomSkillParameter -> Text
$sel:roomArn:PutRoomSkillParameter' :: PutRoomSkillParameter -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
roomArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
skillId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` RoomSkillParameter
roomSkillParameter

instance Prelude.NFData PutRoomSkillParameter where
  rnf :: PutRoomSkillParameter -> ()
rnf PutRoomSkillParameter' {Maybe Text
Text
RoomSkillParameter
roomSkillParameter :: RoomSkillParameter
skillId :: Text
roomArn :: Maybe Text
$sel:roomSkillParameter:PutRoomSkillParameter' :: PutRoomSkillParameter -> RoomSkillParameter
$sel:skillId:PutRoomSkillParameter' :: PutRoomSkillParameter -> Text
$sel:roomArn:PutRoomSkillParameter' :: PutRoomSkillParameter -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
roomArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
skillId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf RoomSkillParameter
roomSkillParameter

instance Data.ToHeaders PutRoomSkillParameter where
  toHeaders :: PutRoomSkillParameter -> 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
"AlexaForBusiness.PutRoomSkillParameter" ::
                          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 PutRoomSkillParameter where
  toJSON :: PutRoomSkillParameter -> Value
toJSON PutRoomSkillParameter' {Maybe Text
Text
RoomSkillParameter
roomSkillParameter :: RoomSkillParameter
skillId :: Text
roomArn :: Maybe Text
$sel:roomSkillParameter:PutRoomSkillParameter' :: PutRoomSkillParameter -> RoomSkillParameter
$sel:skillId:PutRoomSkillParameter' :: PutRoomSkillParameter -> Text
$sel:roomArn:PutRoomSkillParameter' :: PutRoomSkillParameter -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"RoomArn" 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 Text
roomArn,
            forall a. a -> Maybe a
Prelude.Just (Key
"SkillId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
skillId),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"RoomSkillParameter" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= RoomSkillParameter
roomSkillParameter)
          ]
      )

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

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

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

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

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

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