packages feed

amazonka-ec2-2.0: gen/Amazonka/EC2/DescribeAddressTransfers.hs

{-# 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.DescribeAddressTransfers
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Describes an 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/.
--
-- This operation returns paginated results.
module Amazonka.EC2.DescribeAddressTransfers
  ( -- * Creating a Request
    DescribeAddressTransfers (..),
    newDescribeAddressTransfers,

    -- * Request Lenses
    describeAddressTransfers_allocationIds,
    describeAddressTransfers_dryRun,
    describeAddressTransfers_maxResults,
    describeAddressTransfers_nextToken,

    -- * Destructuring the Response
    DescribeAddressTransfersResponse (..),
    newDescribeAddressTransfersResponse,

    -- * Response Lenses
    describeAddressTransfersResponse_addressTransfers,
    describeAddressTransfersResponse_nextToken,
    describeAddressTransfersResponse_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:/ 'newDescribeAddressTransfers' smart constructor.
data DescribeAddressTransfers = DescribeAddressTransfers'
  { -- | The allocation IDs of Elastic IP addresses.
    allocationIds :: Prelude.Maybe [Prelude.Text],
    -- | 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@.
    dryRun :: Prelude.Maybe Prelude.Bool,
    -- | The maximum number of address transfers to return in one page of
    -- results.
    maxResults :: Prelude.Maybe Prelude.Natural,
    -- | Specify the pagination token from a previous request to retrieve the
    -- next page of results.
    nextToken :: Prelude.Maybe Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'DescribeAddressTransfers' 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:
--
-- 'allocationIds', 'describeAddressTransfers_allocationIds' - The allocation IDs of Elastic IP addresses.
--
-- 'dryRun', 'describeAddressTransfers_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@.
--
-- 'maxResults', 'describeAddressTransfers_maxResults' - The maximum number of address transfers to return in one page of
-- results.
--
-- 'nextToken', 'describeAddressTransfers_nextToken' - Specify the pagination token from a previous request to retrieve the
-- next page of results.
newDescribeAddressTransfers ::
  DescribeAddressTransfers
newDescribeAddressTransfers =
  DescribeAddressTransfers'
    { allocationIds =
        Prelude.Nothing,
      dryRun = Prelude.Nothing,
      maxResults = Prelude.Nothing,
      nextToken = Prelude.Nothing
    }

-- | The allocation IDs of Elastic IP addresses.
describeAddressTransfers_allocationIds :: Lens.Lens' DescribeAddressTransfers (Prelude.Maybe [Prelude.Text])
describeAddressTransfers_allocationIds = Lens.lens (\DescribeAddressTransfers' {allocationIds} -> allocationIds) (\s@DescribeAddressTransfers' {} a -> s {allocationIds = a} :: DescribeAddressTransfers) Prelude.. Lens.mapping Lens.coerced

-- | 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@.
describeAddressTransfers_dryRun :: Lens.Lens' DescribeAddressTransfers (Prelude.Maybe Prelude.Bool)
describeAddressTransfers_dryRun = Lens.lens (\DescribeAddressTransfers' {dryRun} -> dryRun) (\s@DescribeAddressTransfers' {} a -> s {dryRun = a} :: DescribeAddressTransfers)

-- | The maximum number of address transfers to return in one page of
-- results.
describeAddressTransfers_maxResults :: Lens.Lens' DescribeAddressTransfers (Prelude.Maybe Prelude.Natural)
describeAddressTransfers_maxResults = Lens.lens (\DescribeAddressTransfers' {maxResults} -> maxResults) (\s@DescribeAddressTransfers' {} a -> s {maxResults = a} :: DescribeAddressTransfers)

-- | Specify the pagination token from a previous request to retrieve the
-- next page of results.
describeAddressTransfers_nextToken :: Lens.Lens' DescribeAddressTransfers (Prelude.Maybe Prelude.Text)
describeAddressTransfers_nextToken = Lens.lens (\DescribeAddressTransfers' {nextToken} -> nextToken) (\s@DescribeAddressTransfers' {} a -> s {nextToken = a} :: DescribeAddressTransfers)

instance Core.AWSPager DescribeAddressTransfers where
  page rq rs
    | Core.stop
        ( rs
            Lens.^? describeAddressTransfersResponse_nextToken
            Prelude.. Lens._Just
        ) =
        Prelude.Nothing
    | Core.stop
        ( rs
            Lens.^? describeAddressTransfersResponse_addressTransfers
            Prelude.. Lens._Just
        ) =
        Prelude.Nothing
    | Prelude.otherwise =
        Prelude.Just
          Prelude.$ rq
          Prelude.& describeAddressTransfers_nextToken
          Lens..~ rs
          Lens.^? describeAddressTransfersResponse_nextToken
          Prelude.. Lens._Just

instance Core.AWSRequest DescribeAddressTransfers where
  type
    AWSResponse DescribeAddressTransfers =
      DescribeAddressTransfersResponse
  request overrides =
    Request.postQuery (overrides defaultService)
  response =
    Response.receiveXML
      ( \s h x ->
          DescribeAddressTransfersResponse'
            Prelude.<$> ( x
                            Data..@? "addressTransferSet"
                            Core..!@ Prelude.mempty
                            Prelude.>>= Core.may (Data.parseXMLList "item")
                        )
            Prelude.<*> (x Data..@? "nextToken")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable DescribeAddressTransfers where
  hashWithSalt _salt DescribeAddressTransfers' {..} =
    _salt
      `Prelude.hashWithSalt` allocationIds
      `Prelude.hashWithSalt` dryRun
      `Prelude.hashWithSalt` maxResults
      `Prelude.hashWithSalt` nextToken

instance Prelude.NFData DescribeAddressTransfers where
  rnf DescribeAddressTransfers' {..} =
    Prelude.rnf allocationIds
      `Prelude.seq` Prelude.rnf dryRun
      `Prelude.seq` Prelude.rnf maxResults
      `Prelude.seq` Prelude.rnf nextToken

instance Data.ToHeaders DescribeAddressTransfers where
  toHeaders = Prelude.const Prelude.mempty

instance Data.ToPath DescribeAddressTransfers where
  toPath = Prelude.const "/"

instance Data.ToQuery DescribeAddressTransfers where
  toQuery DescribeAddressTransfers' {..} =
    Prelude.mconcat
      [ "Action"
          Data.=: ("DescribeAddressTransfers" :: Prelude.ByteString),
        "Version"
          Data.=: ("2016-11-15" :: Prelude.ByteString),
        Data.toQuery
          ( Data.toQueryList "AllocationId"
              Prelude.<$> allocationIds
          ),
        "DryRun" Data.=: dryRun,
        "MaxResults" Data.=: maxResults,
        "NextToken" Data.=: nextToken
      ]

-- | /See:/ 'newDescribeAddressTransfersResponse' smart constructor.
data DescribeAddressTransfersResponse = DescribeAddressTransfersResponse'
  { -- | The Elastic IP address transfer.
    addressTransfers :: Prelude.Maybe [AddressTransfer],
    -- | Specify the pagination token from a previous request to retrieve the
    -- next page of results.
    nextToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'DescribeAddressTransfersResponse' 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:
--
-- 'addressTransfers', 'describeAddressTransfersResponse_addressTransfers' - The Elastic IP address transfer.
--
-- 'nextToken', 'describeAddressTransfersResponse_nextToken' - Specify the pagination token from a previous request to retrieve the
-- next page of results.
--
-- 'httpStatus', 'describeAddressTransfersResponse_httpStatus' - The response's http status code.
newDescribeAddressTransfersResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeAddressTransfersResponse
newDescribeAddressTransfersResponse pHttpStatus_ =
  DescribeAddressTransfersResponse'
    { addressTransfers =
        Prelude.Nothing,
      nextToken = Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | The Elastic IP address transfer.
describeAddressTransfersResponse_addressTransfers :: Lens.Lens' DescribeAddressTransfersResponse (Prelude.Maybe [AddressTransfer])
describeAddressTransfersResponse_addressTransfers = Lens.lens (\DescribeAddressTransfersResponse' {addressTransfers} -> addressTransfers) (\s@DescribeAddressTransfersResponse' {} a -> s {addressTransfers = a} :: DescribeAddressTransfersResponse) Prelude.. Lens.mapping Lens.coerced

-- | Specify the pagination token from a previous request to retrieve the
-- next page of results.
describeAddressTransfersResponse_nextToken :: Lens.Lens' DescribeAddressTransfersResponse (Prelude.Maybe Prelude.Text)
describeAddressTransfersResponse_nextToken = Lens.lens (\DescribeAddressTransfersResponse' {nextToken} -> nextToken) (\s@DescribeAddressTransfersResponse' {} a -> s {nextToken = a} :: DescribeAddressTransfersResponse)

-- | The response's http status code.
describeAddressTransfersResponse_httpStatus :: Lens.Lens' DescribeAddressTransfersResponse Prelude.Int
describeAddressTransfersResponse_httpStatus = Lens.lens (\DescribeAddressTransfersResponse' {httpStatus} -> httpStatus) (\s@DescribeAddressTransfersResponse' {} a -> s {httpStatus = a} :: DescribeAddressTransfersResponse)

instance
  Prelude.NFData
    DescribeAddressTransfersResponse
  where
  rnf DescribeAddressTransfersResponse' {..} =
    Prelude.rnf addressTransfers
      `Prelude.seq` Prelude.rnf nextToken
      `Prelude.seq` Prelude.rnf httpStatus