{-# 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.IoTFleetWise.DeleteCampaign
-- 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 data collection campaign. Deleting a campaign suspends all
-- data collection and removes it from any vehicles.
module Amazonka.IoTFleetWise.DeleteCampaign
  ( -- * Creating a Request
    DeleteCampaign (..),
    newDeleteCampaign,

    -- * Request Lenses
    deleteCampaign_name,

    -- * Destructuring the Response
    DeleteCampaignResponse (..),
    newDeleteCampaignResponse,

    -- * Response Lenses
    deleteCampaignResponse_arn,
    deleteCampaignResponse_name,
    deleteCampaignResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.IoTFleetWise.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newDeleteCampaign' smart constructor.
data DeleteCampaign = DeleteCampaign'
  { -- | The name of the campaign to delete.
    DeleteCampaign -> Text
name :: Prelude.Text
  }
  deriving (DeleteCampaign -> DeleteCampaign -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteCampaign -> DeleteCampaign -> Bool
$c/= :: DeleteCampaign -> DeleteCampaign -> Bool
== :: DeleteCampaign -> DeleteCampaign -> Bool
$c== :: DeleteCampaign -> DeleteCampaign -> Bool
Prelude.Eq, ReadPrec [DeleteCampaign]
ReadPrec DeleteCampaign
Int -> ReadS DeleteCampaign
ReadS [DeleteCampaign]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteCampaign]
$creadListPrec :: ReadPrec [DeleteCampaign]
readPrec :: ReadPrec DeleteCampaign
$creadPrec :: ReadPrec DeleteCampaign
readList :: ReadS [DeleteCampaign]
$creadList :: ReadS [DeleteCampaign]
readsPrec :: Int -> ReadS DeleteCampaign
$creadsPrec :: Int -> ReadS DeleteCampaign
Prelude.Read, Int -> DeleteCampaign -> ShowS
[DeleteCampaign] -> ShowS
DeleteCampaign -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteCampaign] -> ShowS
$cshowList :: [DeleteCampaign] -> ShowS
show :: DeleteCampaign -> String
$cshow :: DeleteCampaign -> String
showsPrec :: Int -> DeleteCampaign -> ShowS
$cshowsPrec :: Int -> DeleteCampaign -> ShowS
Prelude.Show, forall x. Rep DeleteCampaign x -> DeleteCampaign
forall x. DeleteCampaign -> Rep DeleteCampaign x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteCampaign x -> DeleteCampaign
$cfrom :: forall x. DeleteCampaign -> Rep DeleteCampaign x
Prelude.Generic)

-- |
-- Create a value of 'DeleteCampaign' 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', 'deleteCampaign_name' - The name of the campaign to delete.
newDeleteCampaign ::
  -- | 'name'
  Prelude.Text ->
  DeleteCampaign
newDeleteCampaign :: Text -> DeleteCampaign
newDeleteCampaign Text
pName_ =
  DeleteCampaign' {$sel:name:DeleteCampaign' :: Text
name = Text
pName_}

-- | The name of the campaign to delete.
deleteCampaign_name :: Lens.Lens' DeleteCampaign Prelude.Text
deleteCampaign_name :: Lens' DeleteCampaign Text
deleteCampaign_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteCampaign' {Text
name :: Text
$sel:name:DeleteCampaign' :: DeleteCampaign -> Text
name} -> Text
name) (\s :: DeleteCampaign
s@DeleteCampaign' {} Text
a -> DeleteCampaign
s {$sel:name:DeleteCampaign' :: Text
name = Text
a} :: DeleteCampaign)

instance Core.AWSRequest DeleteCampaign where
  type
    AWSResponse DeleteCampaign =
      DeleteCampaignResponse
  request :: (Service -> Service) -> DeleteCampaign -> Request DeleteCampaign
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 DeleteCampaign
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DeleteCampaign)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe Text -> Maybe Text -> Int -> DeleteCampaignResponse
DeleteCampaignResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"arn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"name")
            forall (f :: * -> *) a b. Applicative f => 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 DeleteCampaign where
  hashWithSalt :: Int -> DeleteCampaign -> Int
hashWithSalt Int
_salt DeleteCampaign' {Text
name :: Text
$sel:name:DeleteCampaign' :: DeleteCampaign -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name

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

instance Data.ToHeaders DeleteCampaign where
  toHeaders :: DeleteCampaign -> 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
"IoTAutobahnControlPlane.DeleteCampaign" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.0" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON DeleteCampaign where
  toJSON :: DeleteCampaign -> Value
toJSON DeleteCampaign' {Text
name :: Text
$sel:name:DeleteCampaign' :: DeleteCampaign -> 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 DeleteCampaign where
  toPath :: DeleteCampaign -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

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

-- | /See:/ 'newDeleteCampaignResponse' smart constructor.
data DeleteCampaignResponse = DeleteCampaignResponse'
  { -- | The Amazon Resource Name (ARN) of the deleted campaign.
    --
    -- The ARN isn’t returned if a campaign doesn’t exist.
    DeleteCampaignResponse -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | The name of the deleted campaign.
    DeleteCampaignResponse -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    DeleteCampaignResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DeleteCampaignResponse -> DeleteCampaignResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteCampaignResponse -> DeleteCampaignResponse -> Bool
$c/= :: DeleteCampaignResponse -> DeleteCampaignResponse -> Bool
== :: DeleteCampaignResponse -> DeleteCampaignResponse -> Bool
$c== :: DeleteCampaignResponse -> DeleteCampaignResponse -> Bool
Prelude.Eq, ReadPrec [DeleteCampaignResponse]
ReadPrec DeleteCampaignResponse
Int -> ReadS DeleteCampaignResponse
ReadS [DeleteCampaignResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteCampaignResponse]
$creadListPrec :: ReadPrec [DeleteCampaignResponse]
readPrec :: ReadPrec DeleteCampaignResponse
$creadPrec :: ReadPrec DeleteCampaignResponse
readList :: ReadS [DeleteCampaignResponse]
$creadList :: ReadS [DeleteCampaignResponse]
readsPrec :: Int -> ReadS DeleteCampaignResponse
$creadsPrec :: Int -> ReadS DeleteCampaignResponse
Prelude.Read, Int -> DeleteCampaignResponse -> ShowS
[DeleteCampaignResponse] -> ShowS
DeleteCampaignResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteCampaignResponse] -> ShowS
$cshowList :: [DeleteCampaignResponse] -> ShowS
show :: DeleteCampaignResponse -> String
$cshow :: DeleteCampaignResponse -> String
showsPrec :: Int -> DeleteCampaignResponse -> ShowS
$cshowsPrec :: Int -> DeleteCampaignResponse -> ShowS
Prelude.Show, forall x. Rep DeleteCampaignResponse x -> DeleteCampaignResponse
forall x. DeleteCampaignResponse -> Rep DeleteCampaignResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteCampaignResponse x -> DeleteCampaignResponse
$cfrom :: forall x. DeleteCampaignResponse -> Rep DeleteCampaignResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteCampaignResponse' 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:
--
-- 'arn', 'deleteCampaignResponse_arn' - The Amazon Resource Name (ARN) of the deleted campaign.
--
-- The ARN isn’t returned if a campaign doesn’t exist.
--
-- 'name', 'deleteCampaignResponse_name' - The name of the deleted campaign.
--
-- 'httpStatus', 'deleteCampaignResponse_httpStatus' - The response's http status code.
newDeleteCampaignResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteCampaignResponse
newDeleteCampaignResponse :: Int -> DeleteCampaignResponse
newDeleteCampaignResponse Int
pHttpStatus_ =
  DeleteCampaignResponse'
    { $sel:arn:DeleteCampaignResponse' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:name:DeleteCampaignResponse' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DeleteCampaignResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The Amazon Resource Name (ARN) of the deleted campaign.
--
-- The ARN isn’t returned if a campaign doesn’t exist.
deleteCampaignResponse_arn :: Lens.Lens' DeleteCampaignResponse (Prelude.Maybe Prelude.Text)
deleteCampaignResponse_arn :: Lens' DeleteCampaignResponse (Maybe Text)
deleteCampaignResponse_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteCampaignResponse' {Maybe Text
arn :: Maybe Text
$sel:arn:DeleteCampaignResponse' :: DeleteCampaignResponse -> Maybe Text
arn} -> Maybe Text
arn) (\s :: DeleteCampaignResponse
s@DeleteCampaignResponse' {} Maybe Text
a -> DeleteCampaignResponse
s {$sel:arn:DeleteCampaignResponse' :: Maybe Text
arn = Maybe Text
a} :: DeleteCampaignResponse)

-- | The name of the deleted campaign.
deleteCampaignResponse_name :: Lens.Lens' DeleteCampaignResponse (Prelude.Maybe Prelude.Text)
deleteCampaignResponse_name :: Lens' DeleteCampaignResponse (Maybe Text)
deleteCampaignResponse_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteCampaignResponse' {Maybe Text
name :: Maybe Text
$sel:name:DeleteCampaignResponse' :: DeleteCampaignResponse -> Maybe Text
name} -> Maybe Text
name) (\s :: DeleteCampaignResponse
s@DeleteCampaignResponse' {} Maybe Text
a -> DeleteCampaignResponse
s {$sel:name:DeleteCampaignResponse' :: Maybe Text
name = Maybe Text
a} :: DeleteCampaignResponse)

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

instance Prelude.NFData DeleteCampaignResponse where
  rnf :: DeleteCampaignResponse -> ()
rnf DeleteCampaignResponse' {Int
Maybe Text
httpStatus :: Int
name :: Maybe Text
arn :: Maybe Text
$sel:httpStatus:DeleteCampaignResponse' :: DeleteCampaignResponse -> Int
$sel:name:DeleteCampaignResponse' :: DeleteCampaignResponse -> Maybe Text
$sel:arn:DeleteCampaignResponse' :: DeleteCampaignResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
arn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus