{-# 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.MGN.DeleteWave
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Delete wave.
module Amazonka.MGN.DeleteWave
  ( -- * Creating a Request
    DeleteWave (..),
    newDeleteWave,

    -- * Request Lenses
    deleteWave_waveID,

    -- * Destructuring the Response
    DeleteWaveResponse (..),
    newDeleteWaveResponse,

    -- * Response Lenses
    deleteWaveResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDeleteWave' smart constructor.
data DeleteWave = DeleteWave'
  { -- | Wave ID.
    DeleteWave -> Text
waveID :: Prelude.Text
  }
  deriving (DeleteWave -> DeleteWave -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteWave -> DeleteWave -> Bool
$c/= :: DeleteWave -> DeleteWave -> Bool
== :: DeleteWave -> DeleteWave -> Bool
$c== :: DeleteWave -> DeleteWave -> Bool
Prelude.Eq, ReadPrec [DeleteWave]
ReadPrec DeleteWave
Int -> ReadS DeleteWave
ReadS [DeleteWave]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteWave]
$creadListPrec :: ReadPrec [DeleteWave]
readPrec :: ReadPrec DeleteWave
$creadPrec :: ReadPrec DeleteWave
readList :: ReadS [DeleteWave]
$creadList :: ReadS [DeleteWave]
readsPrec :: Int -> ReadS DeleteWave
$creadsPrec :: Int -> ReadS DeleteWave
Prelude.Read, Int -> DeleteWave -> ShowS
[DeleteWave] -> ShowS
DeleteWave -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteWave] -> ShowS
$cshowList :: [DeleteWave] -> ShowS
show :: DeleteWave -> String
$cshow :: DeleteWave -> String
showsPrec :: Int -> DeleteWave -> ShowS
$cshowsPrec :: Int -> DeleteWave -> ShowS
Prelude.Show, forall x. Rep DeleteWave x -> DeleteWave
forall x. DeleteWave -> Rep DeleteWave x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteWave x -> DeleteWave
$cfrom :: forall x. DeleteWave -> Rep DeleteWave x
Prelude.Generic)

-- |
-- Create a value of 'DeleteWave' 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:
--
-- 'waveID', 'deleteWave_waveID' - Wave ID.
newDeleteWave ::
  -- | 'waveID'
  Prelude.Text ->
  DeleteWave
newDeleteWave :: Text -> DeleteWave
newDeleteWave Text
pWaveID_ =
  DeleteWave' {$sel:waveID:DeleteWave' :: Text
waveID = Text
pWaveID_}

-- | Wave ID.
deleteWave_waveID :: Lens.Lens' DeleteWave Prelude.Text
deleteWave_waveID :: Lens' DeleteWave Text
deleteWave_waveID = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteWave' {Text
waveID :: Text
$sel:waveID:DeleteWave' :: DeleteWave -> Text
waveID} -> Text
waveID) (\s :: DeleteWave
s@DeleteWave' {} Text
a -> DeleteWave
s {$sel:waveID:DeleteWave' :: Text
waveID = Text
a} :: DeleteWave)

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

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

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

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

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

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

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

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

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