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

    -- * Request Lenses
    acceptAddressTransfer_dryRun,
    acceptAddressTransfer_tagSpecifications,
    acceptAddressTransfer_address,

    -- * Destructuring the Response
    AcceptAddressTransferResponse (..),
    newAcceptAddressTransferResponse,

    -- * Response Lenses
    acceptAddressTransferResponse_addressTransfer,
    acceptAddressTransferResponse_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:/ 'newAcceptAddressTransfer' smart constructor.
data AcceptAddressTransfer = AcceptAddressTransfer'
  { -- | 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@.
    AcceptAddressTransfer -> Maybe Bool
dryRun :: Prelude.Maybe Prelude.Bool,
    -- | @tag@:\<key> - The key\/value combination of a tag assigned to the
    -- resource. Use the tag key in the filter name and the tag value as the
    -- filter value. For example, to find all resources that have a tag with
    -- the key @Owner@ and the value @TeamA@, specify @tag:Owner@ for the
    -- filter name and @TeamA@ for the filter value.
    AcceptAddressTransfer -> Maybe [TagSpecification]
tagSpecifications :: Prelude.Maybe [TagSpecification],
    -- | The Elastic IP address you are accepting for transfer.
    AcceptAddressTransfer -> Text
address :: Prelude.Text
  }
  deriving (AcceptAddressTransfer -> AcceptAddressTransfer -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AcceptAddressTransfer -> AcceptAddressTransfer -> Bool
$c/= :: AcceptAddressTransfer -> AcceptAddressTransfer -> Bool
== :: AcceptAddressTransfer -> AcceptAddressTransfer -> Bool
$c== :: AcceptAddressTransfer -> AcceptAddressTransfer -> Bool
Prelude.Eq, ReadPrec [AcceptAddressTransfer]
ReadPrec AcceptAddressTransfer
Int -> ReadS AcceptAddressTransfer
ReadS [AcceptAddressTransfer]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AcceptAddressTransfer]
$creadListPrec :: ReadPrec [AcceptAddressTransfer]
readPrec :: ReadPrec AcceptAddressTransfer
$creadPrec :: ReadPrec AcceptAddressTransfer
readList :: ReadS [AcceptAddressTransfer]
$creadList :: ReadS [AcceptAddressTransfer]
readsPrec :: Int -> ReadS AcceptAddressTransfer
$creadsPrec :: Int -> ReadS AcceptAddressTransfer
Prelude.Read, Int -> AcceptAddressTransfer -> ShowS
[AcceptAddressTransfer] -> ShowS
AcceptAddressTransfer -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AcceptAddressTransfer] -> ShowS
$cshowList :: [AcceptAddressTransfer] -> ShowS
show :: AcceptAddressTransfer -> String
$cshow :: AcceptAddressTransfer -> String
showsPrec :: Int -> AcceptAddressTransfer -> ShowS
$cshowsPrec :: Int -> AcceptAddressTransfer -> ShowS
Prelude.Show, forall x. Rep AcceptAddressTransfer x -> AcceptAddressTransfer
forall x. AcceptAddressTransfer -> Rep AcceptAddressTransfer x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AcceptAddressTransfer x -> AcceptAddressTransfer
$cfrom :: forall x. AcceptAddressTransfer -> Rep AcceptAddressTransfer x
Prelude.Generic)

-- |
-- Create a value of 'AcceptAddressTransfer' 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', 'acceptAddressTransfer_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@.
--
-- 'tagSpecifications', 'acceptAddressTransfer_tagSpecifications' - @tag@:\<key> - The key\/value combination of a tag assigned to the
-- resource. Use the tag key in the filter name and the tag value as the
-- filter value. For example, to find all resources that have a tag with
-- the key @Owner@ and the value @TeamA@, specify @tag:Owner@ for the
-- filter name and @TeamA@ for the filter value.
--
-- 'address', 'acceptAddressTransfer_address' - The Elastic IP address you are accepting for transfer.
newAcceptAddressTransfer ::
  -- | 'address'
  Prelude.Text ->
  AcceptAddressTransfer
newAcceptAddressTransfer :: Text -> AcceptAddressTransfer
newAcceptAddressTransfer Text
pAddress_ =
  AcceptAddressTransfer'
    { $sel:dryRun:AcceptAddressTransfer' :: Maybe Bool
dryRun = forall a. Maybe a
Prelude.Nothing,
      $sel:tagSpecifications:AcceptAddressTransfer' :: Maybe [TagSpecification]
tagSpecifications = forall a. Maybe a
Prelude.Nothing,
      $sel:address:AcceptAddressTransfer' :: Text
address = Text
pAddress_
    }

-- | 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@.
acceptAddressTransfer_dryRun :: Lens.Lens' AcceptAddressTransfer (Prelude.Maybe Prelude.Bool)
acceptAddressTransfer_dryRun :: Lens' AcceptAddressTransfer (Maybe Bool)
acceptAddressTransfer_dryRun = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AcceptAddressTransfer' {Maybe Bool
dryRun :: Maybe Bool
$sel:dryRun:AcceptAddressTransfer' :: AcceptAddressTransfer -> Maybe Bool
dryRun} -> Maybe Bool
dryRun) (\s :: AcceptAddressTransfer
s@AcceptAddressTransfer' {} Maybe Bool
a -> AcceptAddressTransfer
s {$sel:dryRun:AcceptAddressTransfer' :: Maybe Bool
dryRun = Maybe Bool
a} :: AcceptAddressTransfer)

-- | @tag@:\<key> - The key\/value combination of a tag assigned to the
-- resource. Use the tag key in the filter name and the tag value as the
-- filter value. For example, to find all resources that have a tag with
-- the key @Owner@ and the value @TeamA@, specify @tag:Owner@ for the
-- filter name and @TeamA@ for the filter value.
acceptAddressTransfer_tagSpecifications :: Lens.Lens' AcceptAddressTransfer (Prelude.Maybe [TagSpecification])
acceptAddressTransfer_tagSpecifications :: Lens' AcceptAddressTransfer (Maybe [TagSpecification])
acceptAddressTransfer_tagSpecifications = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AcceptAddressTransfer' {Maybe [TagSpecification]
tagSpecifications :: Maybe [TagSpecification]
$sel:tagSpecifications:AcceptAddressTransfer' :: AcceptAddressTransfer -> Maybe [TagSpecification]
tagSpecifications} -> Maybe [TagSpecification]
tagSpecifications) (\s :: AcceptAddressTransfer
s@AcceptAddressTransfer' {} Maybe [TagSpecification]
a -> AcceptAddressTransfer
s {$sel:tagSpecifications:AcceptAddressTransfer' :: Maybe [TagSpecification]
tagSpecifications = Maybe [TagSpecification]
a} :: AcceptAddressTransfer) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The Elastic IP address you are accepting for transfer.
acceptAddressTransfer_address :: Lens.Lens' AcceptAddressTransfer Prelude.Text
acceptAddressTransfer_address :: Lens' AcceptAddressTransfer Text
acceptAddressTransfer_address = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AcceptAddressTransfer' {Text
address :: Text
$sel:address:AcceptAddressTransfer' :: AcceptAddressTransfer -> Text
address} -> Text
address) (\s :: AcceptAddressTransfer
s@AcceptAddressTransfer' {} Text
a -> AcceptAddressTransfer
s {$sel:address:AcceptAddressTransfer' :: Text
address = Text
a} :: AcceptAddressTransfer)

instance Core.AWSRequest AcceptAddressTransfer where
  type
    AWSResponse AcceptAddressTransfer =
      AcceptAddressTransferResponse
  request :: (Service -> Service)
-> AcceptAddressTransfer -> Request AcceptAddressTransfer
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 AcceptAddressTransfer
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse AcceptAddressTransfer)))
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 -> AcceptAddressTransferResponse
AcceptAddressTransferResponse'
            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 AcceptAddressTransfer where
  hashWithSalt :: Int -> AcceptAddressTransfer -> Int
hashWithSalt Int
_salt AcceptAddressTransfer' {Maybe Bool
Maybe [TagSpecification]
Text
address :: Text
tagSpecifications :: Maybe [TagSpecification]
dryRun :: Maybe Bool
$sel:address:AcceptAddressTransfer' :: AcceptAddressTransfer -> Text
$sel:tagSpecifications:AcceptAddressTransfer' :: AcceptAddressTransfer -> Maybe [TagSpecification]
$sel:dryRun:AcceptAddressTransfer' :: AcceptAddressTransfer -> 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` Maybe [TagSpecification]
tagSpecifications
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
address

instance Prelude.NFData AcceptAddressTransfer where
  rnf :: AcceptAddressTransfer -> ()
rnf AcceptAddressTransfer' {Maybe Bool
Maybe [TagSpecification]
Text
address :: Text
tagSpecifications :: Maybe [TagSpecification]
dryRun :: Maybe Bool
$sel:address:AcceptAddressTransfer' :: AcceptAddressTransfer -> Text
$sel:tagSpecifications:AcceptAddressTransfer' :: AcceptAddressTransfer -> Maybe [TagSpecification]
$sel:dryRun:AcceptAddressTransfer' :: AcceptAddressTransfer -> 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 Maybe [TagSpecification]
tagSpecifications
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
address

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

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

instance Data.ToQuery AcceptAddressTransfer where
  toQuery :: AcceptAddressTransfer -> QueryString
toQuery AcceptAddressTransfer' {Maybe Bool
Maybe [TagSpecification]
Text
address :: Text
tagSpecifications :: Maybe [TagSpecification]
dryRun :: Maybe Bool
$sel:address:AcceptAddressTransfer' :: AcceptAddressTransfer -> Text
$sel:tagSpecifications:AcceptAddressTransfer' :: AcceptAddressTransfer -> Maybe [TagSpecification]
$sel:dryRun:AcceptAddressTransfer' :: AcceptAddressTransfer -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"AcceptAddressTransfer" :: 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,
        forall a. ToQuery a => a -> QueryString
Data.toQuery
          ( forall a.
(IsList a, ToQuery (Item a)) =>
ByteString -> a -> QueryString
Data.toQueryList ByteString
"TagSpecification"
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [TagSpecification]
tagSpecifications
          ),
        ByteString
"Address" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
address
      ]

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

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

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

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

instance Prelude.NFData AcceptAddressTransferResponse where
  rnf :: AcceptAddressTransferResponse -> ()
rnf AcceptAddressTransferResponse' {Int
Maybe AddressTransfer
httpStatus :: Int
addressTransfer :: Maybe AddressTransfer
$sel:httpStatus:AcceptAddressTransferResponse' :: AcceptAddressTransferResponse -> Int
$sel:addressTransfer:AcceptAddressTransferResponse' :: AcceptAddressTransferResponse -> 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