{-# 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.CloudTrail.DeleteTrail
-- 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 trail. This operation must be called from the region in which
-- the trail was created. @DeleteTrail@ cannot be called on the shadow
-- trails (replicated trails in other regions) of a trail that is enabled
-- in all regions.
module Amazonka.CloudTrail.DeleteTrail
  ( -- * Creating a Request
    DeleteTrail (..),
    newDeleteTrail,

    -- * Request Lenses
    deleteTrail_name,

    -- * Destructuring the Response
    DeleteTrailResponse (..),
    newDeleteTrailResponse,

    -- * Response Lenses
    deleteTrailResponse_httpStatus,
  )
where

import Amazonka.CloudTrail.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

-- | The request that specifies the name of a trail to delete.
--
-- /See:/ 'newDeleteTrail' smart constructor.
data DeleteTrail = DeleteTrail'
  { -- | Specifies the name or the CloudTrail ARN of the trail to be deleted. The
    -- following is the format of a trail ARN.
    -- @arn:aws:cloudtrail:us-east-2:123456789012:trail\/MyTrail@
    DeleteTrail -> Text
name :: Prelude.Text
  }
  deriving (DeleteTrail -> DeleteTrail -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteTrail -> DeleteTrail -> Bool
$c/= :: DeleteTrail -> DeleteTrail -> Bool
== :: DeleteTrail -> DeleteTrail -> Bool
$c== :: DeleteTrail -> DeleteTrail -> Bool
Prelude.Eq, ReadPrec [DeleteTrail]
ReadPrec DeleteTrail
Int -> ReadS DeleteTrail
ReadS [DeleteTrail]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteTrail]
$creadListPrec :: ReadPrec [DeleteTrail]
readPrec :: ReadPrec DeleteTrail
$creadPrec :: ReadPrec DeleteTrail
readList :: ReadS [DeleteTrail]
$creadList :: ReadS [DeleteTrail]
readsPrec :: Int -> ReadS DeleteTrail
$creadsPrec :: Int -> ReadS DeleteTrail
Prelude.Read, Int -> DeleteTrail -> ShowS
[DeleteTrail] -> ShowS
DeleteTrail -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteTrail] -> ShowS
$cshowList :: [DeleteTrail] -> ShowS
show :: DeleteTrail -> String
$cshow :: DeleteTrail -> String
showsPrec :: Int -> DeleteTrail -> ShowS
$cshowsPrec :: Int -> DeleteTrail -> ShowS
Prelude.Show, forall x. Rep DeleteTrail x -> DeleteTrail
forall x. DeleteTrail -> Rep DeleteTrail x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteTrail x -> DeleteTrail
$cfrom :: forall x. DeleteTrail -> Rep DeleteTrail x
Prelude.Generic)

-- |
-- Create a value of 'DeleteTrail' 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:
--
-- 'name', 'deleteTrail_name' - Specifies the name or the CloudTrail ARN of the trail to be deleted. The
-- following is the format of a trail ARN.
-- @arn:aws:cloudtrail:us-east-2:123456789012:trail\/MyTrail@
newDeleteTrail ::
  -- | 'name'
  Prelude.Text ->
  DeleteTrail
newDeleteTrail :: Text -> DeleteTrail
newDeleteTrail Text
pName_ = DeleteTrail' {$sel:name:DeleteTrail' :: Text
name = Text
pName_}

-- | Specifies the name or the CloudTrail ARN of the trail to be deleted. The
-- following is the format of a trail ARN.
-- @arn:aws:cloudtrail:us-east-2:123456789012:trail\/MyTrail@
deleteTrail_name :: Lens.Lens' DeleteTrail Prelude.Text
deleteTrail_name :: Lens' DeleteTrail Text
deleteTrail_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteTrail' {Text
name :: Text
$sel:name:DeleteTrail' :: DeleteTrail -> Text
name} -> Text
name) (\s :: DeleteTrail
s@DeleteTrail' {} Text
a -> DeleteTrail
s {$sel:name:DeleteTrail' :: Text
name = Text
a} :: DeleteTrail)

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

instance Prelude.NFData DeleteTrail where
  rnf :: DeleteTrail -> ()
rnf DeleteTrail' {Text
name :: Text
$sel:name:DeleteTrail' :: DeleteTrail -> Text
..} = forall a. NFData a => a -> ()
Prelude.rnf Text
name

instance Data.ToHeaders DeleteTrail where
  toHeaders :: DeleteTrail -> 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
"com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.DeleteTrail" ::
                          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 DeleteTrail where
  toJSON :: DeleteTrail -> Value
toJSON DeleteTrail' {Text
name :: Text
$sel:name:DeleteTrail' :: DeleteTrail -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [forall a. a -> Maybe a
Prelude.Just (Key
"Name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
name)]
      )

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

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

-- | Returns the objects or data listed below if successful. Otherwise,
-- returns an error.
--
-- /See:/ 'newDeleteTrailResponse' smart constructor.
data DeleteTrailResponse = DeleteTrailResponse'
  { -- | The response's http status code.
    DeleteTrailResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DeleteTrailResponse -> DeleteTrailResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteTrailResponse -> DeleteTrailResponse -> Bool
$c/= :: DeleteTrailResponse -> DeleteTrailResponse -> Bool
== :: DeleteTrailResponse -> DeleteTrailResponse -> Bool
$c== :: DeleteTrailResponse -> DeleteTrailResponse -> Bool
Prelude.Eq, ReadPrec [DeleteTrailResponse]
ReadPrec DeleteTrailResponse
Int -> ReadS DeleteTrailResponse
ReadS [DeleteTrailResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteTrailResponse]
$creadListPrec :: ReadPrec [DeleteTrailResponse]
readPrec :: ReadPrec DeleteTrailResponse
$creadPrec :: ReadPrec DeleteTrailResponse
readList :: ReadS [DeleteTrailResponse]
$creadList :: ReadS [DeleteTrailResponse]
readsPrec :: Int -> ReadS DeleteTrailResponse
$creadsPrec :: Int -> ReadS DeleteTrailResponse
Prelude.Read, Int -> DeleteTrailResponse -> ShowS
[DeleteTrailResponse] -> ShowS
DeleteTrailResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteTrailResponse] -> ShowS
$cshowList :: [DeleteTrailResponse] -> ShowS
show :: DeleteTrailResponse -> String
$cshow :: DeleteTrailResponse -> String
showsPrec :: Int -> DeleteTrailResponse -> ShowS
$cshowsPrec :: Int -> DeleteTrailResponse -> ShowS
Prelude.Show, forall x. Rep DeleteTrailResponse x -> DeleteTrailResponse
forall x. DeleteTrailResponse -> Rep DeleteTrailResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteTrailResponse x -> DeleteTrailResponse
$cfrom :: forall x. DeleteTrailResponse -> Rep DeleteTrailResponse x
Prelude.Generic)

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

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

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