{-# 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.DeleteTimelineEvent
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes a timeline event from an incident.
module Amazonka.SSMIncidents.DeleteTimelineEvent
  ( -- * Creating a Request
    DeleteTimelineEvent (..),
    newDeleteTimelineEvent,

    -- * Request Lenses
    deleteTimelineEvent_eventId,
    deleteTimelineEvent_incidentRecordArn,

    -- * Destructuring the Response
    DeleteTimelineEventResponse (..),
    newDeleteTimelineEventResponse,

    -- * Response Lenses
    deleteTimelineEventResponse_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:/ 'newDeleteTimelineEvent' smart constructor.
data DeleteTimelineEvent = DeleteTimelineEvent'
  { -- | The ID of the event you are updating. You can find this by using
    -- @ListTimelineEvents@.
    DeleteTimelineEvent -> Text
eventId :: Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the incident that includes the
    -- timeline event.
    DeleteTimelineEvent -> Text
incidentRecordArn :: Prelude.Text
  }
  deriving (DeleteTimelineEvent -> DeleteTimelineEvent -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteTimelineEvent -> DeleteTimelineEvent -> Bool
$c/= :: DeleteTimelineEvent -> DeleteTimelineEvent -> Bool
== :: DeleteTimelineEvent -> DeleteTimelineEvent -> Bool
$c== :: DeleteTimelineEvent -> DeleteTimelineEvent -> Bool
Prelude.Eq, ReadPrec [DeleteTimelineEvent]
ReadPrec DeleteTimelineEvent
Int -> ReadS DeleteTimelineEvent
ReadS [DeleteTimelineEvent]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteTimelineEvent]
$creadListPrec :: ReadPrec [DeleteTimelineEvent]
readPrec :: ReadPrec DeleteTimelineEvent
$creadPrec :: ReadPrec DeleteTimelineEvent
readList :: ReadS [DeleteTimelineEvent]
$creadList :: ReadS [DeleteTimelineEvent]
readsPrec :: Int -> ReadS DeleteTimelineEvent
$creadsPrec :: Int -> ReadS DeleteTimelineEvent
Prelude.Read, Int -> DeleteTimelineEvent -> ShowS
[DeleteTimelineEvent] -> ShowS
DeleteTimelineEvent -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteTimelineEvent] -> ShowS
$cshowList :: [DeleteTimelineEvent] -> ShowS
show :: DeleteTimelineEvent -> String
$cshow :: DeleteTimelineEvent -> String
showsPrec :: Int -> DeleteTimelineEvent -> ShowS
$cshowsPrec :: Int -> DeleteTimelineEvent -> ShowS
Prelude.Show, forall x. Rep DeleteTimelineEvent x -> DeleteTimelineEvent
forall x. DeleteTimelineEvent -> Rep DeleteTimelineEvent x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteTimelineEvent x -> DeleteTimelineEvent
$cfrom :: forall x. DeleteTimelineEvent -> Rep DeleteTimelineEvent x
Prelude.Generic)

-- |
-- Create a value of 'DeleteTimelineEvent' 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:
--
-- 'eventId', 'deleteTimelineEvent_eventId' - The ID of the event you are updating. You can find this by using
-- @ListTimelineEvents@.
--
-- 'incidentRecordArn', 'deleteTimelineEvent_incidentRecordArn' - The Amazon Resource Name (ARN) of the incident that includes the
-- timeline event.
newDeleteTimelineEvent ::
  -- | 'eventId'
  Prelude.Text ->
  -- | 'incidentRecordArn'
  Prelude.Text ->
  DeleteTimelineEvent
newDeleteTimelineEvent :: Text -> Text -> DeleteTimelineEvent
newDeleteTimelineEvent Text
pEventId_ Text
pIncidentRecordArn_ =
  DeleteTimelineEvent'
    { $sel:eventId:DeleteTimelineEvent' :: Text
eventId = Text
pEventId_,
      $sel:incidentRecordArn:DeleteTimelineEvent' :: Text
incidentRecordArn = Text
pIncidentRecordArn_
    }

-- | The ID of the event you are updating. You can find this by using
-- @ListTimelineEvents@.
deleteTimelineEvent_eventId :: Lens.Lens' DeleteTimelineEvent Prelude.Text
deleteTimelineEvent_eventId :: Lens' DeleteTimelineEvent Text
deleteTimelineEvent_eventId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteTimelineEvent' {Text
eventId :: Text
$sel:eventId:DeleteTimelineEvent' :: DeleteTimelineEvent -> Text
eventId} -> Text
eventId) (\s :: DeleteTimelineEvent
s@DeleteTimelineEvent' {} Text
a -> DeleteTimelineEvent
s {$sel:eventId:DeleteTimelineEvent' :: Text
eventId = Text
a} :: DeleteTimelineEvent)

-- | The Amazon Resource Name (ARN) of the incident that includes the
-- timeline event.
deleteTimelineEvent_incidentRecordArn :: Lens.Lens' DeleteTimelineEvent Prelude.Text
deleteTimelineEvent_incidentRecordArn :: Lens' DeleteTimelineEvent Text
deleteTimelineEvent_incidentRecordArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteTimelineEvent' {Text
incidentRecordArn :: Text
$sel:incidentRecordArn:DeleteTimelineEvent' :: DeleteTimelineEvent -> Text
incidentRecordArn} -> Text
incidentRecordArn) (\s :: DeleteTimelineEvent
s@DeleteTimelineEvent' {} Text
a -> DeleteTimelineEvent
s {$sel:incidentRecordArn:DeleteTimelineEvent' :: Text
incidentRecordArn = Text
a} :: DeleteTimelineEvent)

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

instance Prelude.NFData DeleteTimelineEvent where
  rnf :: DeleteTimelineEvent -> ()
rnf DeleteTimelineEvent' {Text
incidentRecordArn :: Text
eventId :: Text
$sel:incidentRecordArn:DeleteTimelineEvent' :: DeleteTimelineEvent -> Text
$sel:eventId:DeleteTimelineEvent' :: DeleteTimelineEvent -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
eventId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
incidentRecordArn

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

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

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

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

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

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

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