{-# 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.EC2.DisableAddressTransfer
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Disables Elastic IP address transfer. For more information, see
-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro Transfer Elastic IP addresses>
-- in the /Amazon Virtual Private Cloud User Guide/.
module Amazonka.EC2.DisableAddressTransfer
  ( -- * Creating a Request
    DisableAddressTransfer (..),
    newDisableAddressTransfer,

    -- * Request Lenses
    disableAddressTransfer_dryRun,
    disableAddressTransfer_allocationId,

    -- * Destructuring the Response
    DisableAddressTransferResponse (..),
    newDisableAddressTransferResponse,

    -- * Response Lenses
    disableAddressTransferResponse_addressTransfer,
    disableAddressTransferResponse_httpStatus,
  )
where

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

-- | /See:/ 'newDisableAddressTransfer' smart constructor.
data DisableAddressTransfer = DisableAddressTransfer'
  { -- | Checks whether you have the required permissions for the action, without
    -- actually making the request, and provides an error response. If you have
    -- the required permissions, the error response is @DryRunOperation@.
    -- Otherwise, it is @UnauthorizedOperation@.
    DisableAddressTransfer -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool,
    -- | The allocation ID of an Elastic IP address.
    DisableAddressTransfer -> Text
allocationId :: Prelude.Text
  }
  deriving (DisableAddressTransfer -> DisableAddressTransfer -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DisableAddressTransfer -> DisableAddressTransfer -> Bool
$c/= :: DisableAddressTransfer -> DisableAddressTransfer -> Bool
== :: DisableAddressTransfer -> DisableAddressTransfer -> Bool
$c== :: DisableAddressTransfer -> DisableAddressTransfer -> Bool
Prelude.Eq, ReadPrec [DisableAddressTransfer]
ReadPrec DisableAddressTransfer
Int -> ReadS DisableAddressTransfer
ReadS [DisableAddressTransfer]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DisableAddressTransfer]
$creadListPrec :: ReadPrec [DisableAddressTransfer]
readPrec :: ReadPrec DisableAddressTransfer
$creadPrec :: ReadPrec DisableAddressTransfer
readList :: ReadS [DisableAddressTransfer]
$creadList :: ReadS [DisableAddressTransfer]
readsPrec :: Int -> ReadS DisableAddressTransfer
$creadsPrec :: Int -> ReadS DisableAddressTransfer
Prelude.Read, Int -> DisableAddressTransfer -> ShowS
[DisableAddressTransfer] -> ShowS
DisableAddressTransfer -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DisableAddressTransfer] -> ShowS
$cshowList :: [DisableAddressTransfer] -> ShowS
show :: DisableAddressTransfer -> String
$cshow :: DisableAddressTransfer -> String
showsPrec :: Int -> DisableAddressTransfer -> ShowS
$cshowsPrec :: Int -> DisableAddressTransfer -> ShowS
Prelude.Show, forall x. Rep DisableAddressTransfer x -> DisableAddressTransfer
forall x. DisableAddressTransfer -> Rep DisableAddressTransfer x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DisableAddressTransfer x -> DisableAddressTransfer
$cfrom :: forall x. DisableAddressTransfer -> Rep DisableAddressTransfer x
Prelude.Generic)

-- |
-- Create a value of 'DisableAddressTransfer' 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:
--
-- 'dryRun', 'disableAddressTransfer_dryRun' - Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
--
-- 'allocationId', 'disableAddressTransfer_allocationId' - The allocation ID of an Elastic IP address.
newDisableAddressTransfer ::
  -- | 'allocationId'
  Prelude.Text ->
  DisableAddressTransfer
newDisableAddressTransfer :: Text -> DisableAddressTransfer
newDisableAddressTransfer Text
pAllocationId_ =
  DisableAddressTransfer'
    { $sel:dryRun:DisableAddressTransfer' :: Maybe Bool
dryRun = forall a. Maybe a
Prelude.Nothing,
      $sel:allocationId:DisableAddressTransfer' :: Text
allocationId = Text
pAllocationId_
    }

-- | Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
disableAddressTransfer_dryRun :: Lens.Lens' DisableAddressTransfer (Prelude.Maybe Prelude.Bool)
disableAddressTransfer_dryRun :: Lens' DisableAddressTransfer (Maybe Bool)
disableAddressTransfer_dryRun = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisableAddressTransfer' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:DisableAddressTransfer' :: DisableAddressTransfer -> Maybe Bool
dryRun} -> Maybe Bool
dryRun) (\s :: DisableAddressTransfer
s@DisableAddressTransfer' {} Maybe Bool
a -> DisableAddressTransfer
s {$sel:dryRun:DisableAddressTransfer' :: Maybe Bool
dryRun = Maybe Bool
a} :: DisableAddressTransfer)

-- | The allocation ID of an Elastic IP address.
disableAddressTransfer_allocationId :: Lens.Lens' DisableAddressTransfer Prelude.Text
disableAddressTransfer_allocationId :: Lens' DisableAddressTransfer Text
disableAddressTransfer_allocationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisableAddressTransfer' {Text
allocationId :: Text
$sel:allocationId:DisableAddressTransfer' :: DisableAddressTransfer -> Text
allocationId} -> Text
allocationId) (\s :: DisableAddressTransfer
s@DisableAddressTransfer' {} Text
a -> DisableAddressTransfer
s {$sel:allocationId:DisableAddressTransfer' :: Text
allocationId = Text
a} :: DisableAddressTransfer)

instance Core.AWSRequest DisableAddressTransfer where
  type
    AWSResponse DisableAddressTransfer =
      DisableAddressTransferResponse
  request :: (Service -> Service)
-> DisableAddressTransfer -> Request DisableAddressTransfer
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DisableAddressTransfer
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DisableAddressTransfer)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXML
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe AddressTransfer -> Int -> DisableAddressTransferResponse
DisableAddressTransferResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"addressTransfer")
            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 DisableAddressTransfer where
  hashWithSalt :: Int -> DisableAddressTransfer -> Int
hashWithSalt Int
_salt DisableAddressTransfer' {Maybe Bool
Text
allocationId :: Text
dryRun :: Maybe Bool
$sel:allocationId:DisableAddressTransfer' :: DisableAddressTransfer -> Text
$sel:dryRun:DisableAddressTransfer' :: DisableAddressTransfer -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
dryRun
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
allocationId

instance Prelude.NFData DisableAddressTransfer where
  rnf :: DisableAddressTransfer -> ()
rnf DisableAddressTransfer' {Maybe Bool
Text
allocationId :: Text
dryRun :: Maybe Bool
$sel:allocationId:DisableAddressTransfer' :: DisableAddressTransfer -> Text
$sel:dryRun:DisableAddressTransfer' :: DisableAddressTransfer -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
dryRun
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
allocationId

instance Data.ToHeaders DisableAddressTransfer where
  toHeaders :: DisableAddressTransfer -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

instance Data.ToQuery DisableAddressTransfer where
  toQuery :: DisableAddressTransfer -> QueryString
toQuery DisableAddressTransfer' {Maybe Bool
Text
allocationId :: Text
dryRun :: Maybe Bool
$sel:allocationId:DisableAddressTransfer' :: DisableAddressTransfer -> Text
$sel:dryRun:DisableAddressTransfer' :: DisableAddressTransfer -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"DisableAddressTransfer" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2016-11-15" :: Prelude.ByteString),
        ByteString
"DryRun" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
dryRun,
        ByteString
"AllocationId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
allocationId
      ]

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

-- |
-- Create a value of 'DisableAddressTransferResponse' 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:
--
-- 'addressTransfer', 'disableAddressTransferResponse_addressTransfer' - An Elastic IP address transfer.
--
-- 'httpStatus', 'disableAddressTransferResponse_httpStatus' - The response's http status code.
newDisableAddressTransferResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DisableAddressTransferResponse
newDisableAddressTransferResponse :: Int -> DisableAddressTransferResponse
newDisableAddressTransferResponse Int
pHttpStatus_ =
  DisableAddressTransferResponse'
    { $sel:addressTransfer:DisableAddressTransferResponse' :: Maybe AddressTransfer
addressTransfer =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DisableAddressTransferResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | An Elastic IP address transfer.
disableAddressTransferResponse_addressTransfer :: Lens.Lens' DisableAddressTransferResponse (Prelude.Maybe AddressTransfer)
disableAddressTransferResponse_addressTransfer :: Lens' DisableAddressTransferResponse (Maybe AddressTransfer)
disableAddressTransferResponse_addressTransfer = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DisableAddressTransferResponse' {Maybe AddressTransfer
addressTransfer :: Maybe AddressTransfer
$sel:addressTransfer:DisableAddressTransferResponse' :: DisableAddressTransferResponse -> Maybe AddressTransfer
addressTransfer} -> Maybe AddressTransfer
addressTransfer) (\s :: DisableAddressTransferResponse
s@DisableAddressTransferResponse' {} Maybe AddressTransfer
a -> DisableAddressTransferResponse
s {$sel:addressTransfer:DisableAddressTransferResponse' :: Maybe AddressTransfer
addressTransfer = Maybe AddressTransfer
a} :: DisableAddressTransferResponse)

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

instance
  Prelude.NFData
    DisableAddressTransferResponse
  where
  rnf :: DisableAddressTransferResponse -> ()
rnf DisableAddressTransferResponse' {Int
Maybe AddressTransfer
httpStatus :: Int
addressTransfer :: Maybe AddressTransfer
$sel:httpStatus:DisableAddressTransferResponse' :: DisableAddressTransferResponse -> Int
$sel:addressTransfer:DisableAddressTransferResponse' :: DisableAddressTransferResponse -> Maybe AddressTransfer
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AddressTransfer
addressTransfer
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus