{-# 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.SSMIncidents.UpdateRelatedItems
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Add or remove related items from the related items tab of an incident
-- record.
module Amazonka.SSMIncidents.UpdateRelatedItems
  ( -- * Creating a Request
    UpdateRelatedItems (..),
    newUpdateRelatedItems,

    -- * Request Lenses
    updateRelatedItems_clientToken,
    updateRelatedItems_incidentRecordArn,
    updateRelatedItems_relatedItemsUpdate,

    -- * Destructuring the Response
    UpdateRelatedItemsResponse (..),
    newUpdateRelatedItemsResponse,

    -- * Response Lenses
    updateRelatedItemsResponse_httpStatus,
  )
where

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

-- | /See:/ 'newUpdateRelatedItems' smart constructor.
data UpdateRelatedItems = UpdateRelatedItems'
  { -- | A token ensuring that the operation is called only once with the
    -- specified details.
    UpdateRelatedItems -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the incident record containing the
    -- related items you are updating.
    UpdateRelatedItems -> Text
incidentRecordArn :: Prelude.Text,
    -- | Details about the item you are adding or deleting.
    UpdateRelatedItems -> RelatedItemsUpdate
relatedItemsUpdate :: RelatedItemsUpdate
  }
  deriving (UpdateRelatedItems -> UpdateRelatedItems -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateRelatedItems -> UpdateRelatedItems -> Bool
$c/= :: UpdateRelatedItems -> UpdateRelatedItems -> Bool
== :: UpdateRelatedItems -> UpdateRelatedItems -> Bool
$c== :: UpdateRelatedItems -> UpdateRelatedItems -> Bool
Prelude.Eq, ReadPrec [UpdateRelatedItems]
ReadPrec UpdateRelatedItems
Int -> ReadS UpdateRelatedItems
ReadS [UpdateRelatedItems]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateRelatedItems]
$creadListPrec :: ReadPrec [UpdateRelatedItems]
readPrec :: ReadPrec UpdateRelatedItems
$creadPrec :: ReadPrec UpdateRelatedItems
readList :: ReadS [UpdateRelatedItems]
$creadList :: ReadS [UpdateRelatedItems]
readsPrec :: Int -> ReadS UpdateRelatedItems
$creadsPrec :: Int -> ReadS UpdateRelatedItems
Prelude.Read, Int -> UpdateRelatedItems -> ShowS
[UpdateRelatedItems] -> ShowS
UpdateRelatedItems -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateRelatedItems] -> ShowS
$cshowList :: [UpdateRelatedItems] -> ShowS
show :: UpdateRelatedItems -> String
$cshow :: UpdateRelatedItems -> String
showsPrec :: Int -> UpdateRelatedItems -> ShowS
$cshowsPrec :: Int -> UpdateRelatedItems -> ShowS
Prelude.Show, forall x. Rep UpdateRelatedItems x -> UpdateRelatedItems
forall x. UpdateRelatedItems -> Rep UpdateRelatedItems x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateRelatedItems x -> UpdateRelatedItems
$cfrom :: forall x. UpdateRelatedItems -> Rep UpdateRelatedItems x
Prelude.Generic)

-- |
-- Create a value of 'UpdateRelatedItems' 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', 'updateRelatedItems_clientToken' - A token ensuring that the operation is called only once with the
-- specified details.
--
-- 'incidentRecordArn', 'updateRelatedItems_incidentRecordArn' - The Amazon Resource Name (ARN) of the incident record containing the
-- related items you are updating.
--
-- 'relatedItemsUpdate', 'updateRelatedItems_relatedItemsUpdate' - Details about the item you are adding or deleting.
newUpdateRelatedItems ::
  -- | 'incidentRecordArn'
  Prelude.Text ->
  -- | 'relatedItemsUpdate'
  RelatedItemsUpdate ->
  UpdateRelatedItems
newUpdateRelatedItems :: Text -> RelatedItemsUpdate -> UpdateRelatedItems
newUpdateRelatedItems
  Text
pIncidentRecordArn_
  RelatedItemsUpdate
pRelatedItemsUpdate_ =
    UpdateRelatedItems'
      { $sel:clientToken:UpdateRelatedItems' :: Maybe Text
clientToken = forall a. Maybe a
Prelude.Nothing,
        $sel:incidentRecordArn:UpdateRelatedItems' :: Text
incidentRecordArn = Text
pIncidentRecordArn_,
        $sel:relatedItemsUpdate:UpdateRelatedItems' :: RelatedItemsUpdate
relatedItemsUpdate = RelatedItemsUpdate
pRelatedItemsUpdate_
      }

-- | A token ensuring that the operation is called only once with the
-- specified details.
updateRelatedItems_clientToken :: Lens.Lens' UpdateRelatedItems (Prelude.Maybe Prelude.Text)
updateRelatedItems_clientToken :: Lens' UpdateRelatedItems (Maybe Text)
updateRelatedItems_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateRelatedItems' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:UpdateRelatedItems' :: UpdateRelatedItems -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: UpdateRelatedItems
s@UpdateRelatedItems' {} Maybe Text
a -> UpdateRelatedItems
s {$sel:clientToken:UpdateRelatedItems' :: Maybe Text
clientToken = Maybe Text
a} :: UpdateRelatedItems)

-- | The Amazon Resource Name (ARN) of the incident record containing the
-- related items you are updating.
updateRelatedItems_incidentRecordArn :: Lens.Lens' UpdateRelatedItems Prelude.Text
updateRelatedItems_incidentRecordArn :: Lens' UpdateRelatedItems Text
updateRelatedItems_incidentRecordArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateRelatedItems' {Text
incidentRecordArn :: Text
$sel:incidentRecordArn:UpdateRelatedItems' :: UpdateRelatedItems -> Text
incidentRecordArn} -> Text
incidentRecordArn) (\s :: UpdateRelatedItems
s@UpdateRelatedItems' {} Text
a -> UpdateRelatedItems
s {$sel:incidentRecordArn:UpdateRelatedItems' :: Text
incidentRecordArn = Text
a} :: UpdateRelatedItems)

-- | Details about the item you are adding or deleting.
updateRelatedItems_relatedItemsUpdate :: Lens.Lens' UpdateRelatedItems RelatedItemsUpdate
updateRelatedItems_relatedItemsUpdate :: Lens' UpdateRelatedItems RelatedItemsUpdate
updateRelatedItems_relatedItemsUpdate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateRelatedItems' {RelatedItemsUpdate
relatedItemsUpdate :: RelatedItemsUpdate
$sel:relatedItemsUpdate:UpdateRelatedItems' :: UpdateRelatedItems -> RelatedItemsUpdate
relatedItemsUpdate} -> RelatedItemsUpdate
relatedItemsUpdate) (\s :: UpdateRelatedItems
s@UpdateRelatedItems' {} RelatedItemsUpdate
a -> UpdateRelatedItems
s {$sel:relatedItemsUpdate:UpdateRelatedItems' :: RelatedItemsUpdate
relatedItemsUpdate = RelatedItemsUpdate
a} :: UpdateRelatedItems)

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

instance Prelude.NFData UpdateRelatedItems where
  rnf :: UpdateRelatedItems -> ()
rnf UpdateRelatedItems' {Maybe Text
Text
RelatedItemsUpdate
relatedItemsUpdate :: RelatedItemsUpdate
incidentRecordArn :: Text
clientToken :: Maybe Text
$sel:relatedItemsUpdate:UpdateRelatedItems' :: UpdateRelatedItems -> RelatedItemsUpdate
$sel:incidentRecordArn:UpdateRelatedItems' :: UpdateRelatedItems -> Text
$sel:clientToken:UpdateRelatedItems' :: UpdateRelatedItems -> 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
incidentRecordArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf RelatedItemsUpdate
relatedItemsUpdate

instance Data.ToHeaders UpdateRelatedItems where
  toHeaders :: UpdateRelatedItems -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON UpdateRelatedItems where
  toJSON :: UpdateRelatedItems -> Value
toJSON UpdateRelatedItems' {Maybe Text
Text
RelatedItemsUpdate
relatedItemsUpdate :: RelatedItemsUpdate
incidentRecordArn :: Text
clientToken :: Maybe Text
$sel:relatedItemsUpdate:UpdateRelatedItems' :: UpdateRelatedItems -> RelatedItemsUpdate
$sel:incidentRecordArn:UpdateRelatedItems' :: UpdateRelatedItems -> Text
$sel:clientToken:UpdateRelatedItems' :: UpdateRelatedItems -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"clientToken" 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
clientToken,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"incidentRecordArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
incidentRecordArn),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"relatedItemsUpdate" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= RelatedItemsUpdate
relatedItemsUpdate)
          ]
      )

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

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

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

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

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

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