{-# 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.ResourceGroupsTagging.GetResources
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns all the tagged or previously tagged resources that are located
-- in the specified Region for the AWS account.
--
-- Depending on what information you want returned, you can also specify
-- the following:
--
-- -   /Filters/ that specify what tags and resource types you want
--     returned. The response includes all tags that are associated with
--     the requested resources.
--
-- -   Information about compliance with the account\'s effective tag
--     policy. For more information on tag policies, see
--     <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_tag-policies.html Tag Policies>
--     in the /AWS Organizations User Guide./
--
-- This operation supports pagination, where the response can be sent in
-- multiple pages. You should check the @PaginationToken@ response
-- parameter to determine if there are additional results available to
-- return. Repeat the query, passing the @PaginationToken@ response
-- parameter value as an input to the next request until you recieve a
-- @null@ value. A null value for @PaginationToken@ indicates that there
-- are no more results waiting to be returned.
--
-- This operation returns paginated results.
module Amazonka.ResourceGroupsTagging.GetResources
  ( -- * Creating a Request
    GetResources (..),
    newGetResources,

    -- * Request Lenses
    getResources_paginationToken,
    getResources_resourcesPerPage,
    getResources_excludeCompliantResources,
    getResources_includeComplianceDetails,
    getResources_resourceTypeFilters,
    getResources_tagFilters,
    getResources_resourceARNList,
    getResources_tagsPerPage,

    -- * Destructuring the Response
    GetResourcesResponse (..),
    newGetResourcesResponse,

    -- * Response Lenses
    getResourcesResponse_paginationToken,
    getResourcesResponse_resourceTagMappingList,
    getResourcesResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import Amazonka.ResourceGroupsTagging.Types
import qualified Amazonka.Response as Response

-- | /See:/ 'newGetResources' smart constructor.
data GetResources = GetResources'
  { -- | Specifies a @PaginationToken@ response value from a previous request to
    -- indicate that you want the next page of results. Leave this parameter
    -- empty in your initial request.
    GetResources -> Maybe Text
paginationToken :: Prelude.Maybe Prelude.Text,
    -- | Specifies the maximum number of results to be returned in each page. A
    -- query can return fewer than this maximum, even if there are more results
    -- still to return. You should always check the @PaginationToken@ response
    -- value to see if there are more results. You can specify a minimum of 1
    -- and a maximum value of 100.
    GetResources -> Maybe Int
resourcesPerPage :: Prelude.Maybe Prelude.Int,
    -- | Specifies whether to exclude resources that are compliant with the tag
    -- policy. Set this to @true@ if you are interested in retrieving
    -- information on noncompliant resources only.
    --
    -- You can use this parameter only if the @IncludeComplianceDetails@
    -- parameter is also set to @true@.
    GetResources -> Maybe Bool
excludeCompliantResources :: Prelude.Maybe Prelude.Bool,
    -- | Specifies whether to include details regarding the compliance with the
    -- effective tag policy. Set this to @true@ to determine whether resources
    -- are compliant with the tag policy and to get details.
    GetResources -> Maybe Bool
includeComplianceDetails :: Prelude.Maybe Prelude.Bool,
    -- | Specifies the resource types that you want included in the response. The
    -- format of each resource type is @service[:resourceType]@. For example,
    -- specifying a resource type of @ec2@ returns all Amazon EC2 resources
    -- (which includes EC2 instances). Specifying a resource type of
    -- @ec2:instance@ returns only EC2 instances.
    --
    -- The string for each service name and resource type is the same as that
    -- embedded in a resource\'s Amazon Resource Name (ARN). Consult the /AWS
    -- General Reference/ for the following:
    --
    -- For more information about ARNs, see
    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces>.
    --
    -- You can specify multiple resource types by using an array. The array can
    -- include up to 100 items. Note that the length constraint requirement
    -- applies to each resource type filter.
    GetResources -> Maybe [Text]
resourceTypeFilters :: Prelude.Maybe [Prelude.Text],
    -- | Specifies a list of TagFilters (keys and values) to restrict the output
    -- to only those resources that have the specified tag and, if included,
    -- the specified value. Each @TagFilter@ must contain a key with values
    -- optional. A request can include up to 50 keys, and each key can include
    -- up to 20 values.
    --
    -- Note the following when deciding how to use TagFilters:
    --
    -- -   If you /don\'t/ specify a @TagFilter@, the response includes all
    --     resources that are currently tagged or ever had a tag. Resources
    --     that currently don\'t have tags are shown with an empty tag set,
    --     like this: @\"Tags\": []@.
    --
    -- -   If you specify more than one filter in a single request, the
    --     response returns only those resources that satisfy all filters.
    --
    -- -   If you specify a filter that contains more than one value for a key,
    --     the response returns resources that match any of the specified
    --     values for that key.
    --
    -- -   If you don\'t specify any values for a key, the response returns
    --     resources that are tagged with that key and any or no value.
    --
    --     For example, for the following filters: @filter1= {keyA,{value1}}@,
    --     @filter2={keyB,{value2,value3,value4}}@, @filter3= {keyC}@:
    --
    --     -   @GetResources({filter1})@ returns resources tagged with
    --         @key1=value1@
    --
    --     -   @GetResources({filter2})@ returns resources tagged with
    --         @key2=value2@ or @key2=value3@ or @key2=value4@
    --
    --     -   @GetResources({filter3})@ returns resources tagged with any tag
    --         with the key @key3@, and with any or no value
    --
    --     -   @GetResources({filter1,filter2,filter3})@ returns resources
    --         tagged with
    --         @(key1=value1) and (key2=value2 or key2=value3 or key2=value4) and (key3, any or no value)@
    GetResources -> Maybe [TagFilter]
tagFilters :: Prelude.Maybe [TagFilter],
    -- | Specifies a list of ARNs of resources for which you want to retrieve tag
    -- data. You can\'t specify both this parameter and any of the pagination
    -- parameters (@ResourcesPerPage@, @TagsPerPage@, @PaginationToken@) in the
    -- same request. If you specify both, you get an @Invalid Parameter@
    -- exception.
    --
    -- If a resource specified by this parameter doesn\'t exist, it doesn\'t
    -- generate an error; it simply isn\'t included in the response.
    --
    -- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
    -- information, see
    -- <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces>
    -- in the /AWS General Reference/.
    GetResources -> Maybe (NonEmpty Text)
resourceARNList :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
    -- | AWS recommends using @ResourcesPerPage@ instead of this parameter.
    --
    -- A limit that restricts the number of tags (key and value pairs) returned
    -- by @GetResources@ in paginated output. A resource with no tags is
    -- counted as having one tag (one key and value pair).
    --
    -- @GetResources@ does not split a resource and its associated tags across
    -- pages. If the specified @TagsPerPage@ would cause such a break, a
    -- @PaginationToken@ is returned in place of the affected resource and its
    -- tags. Use that token in another request to get the remaining data. For
    -- example, if you specify a @TagsPerPage@ of @100@ and the account has 22
    -- resources with 10 tags each (meaning that each resource has 10 key and
    -- value pairs), the output will consist of three pages. The first page
    -- displays the first 10 resources, each with its 10 tags. The second page
    -- displays the next 10 resources, each with its 10 tags. The third page
    -- displays the remaining 2 resources, each with its 10 tags.
    --
    -- You can set @TagsPerPage@ to a minimum of 100 items up to a maximum of
    -- 500 items.
    GetResources -> Maybe Int
tagsPerPage :: Prelude.Maybe Prelude.Int
  }
  deriving (GetResources -> GetResources -> Bool
(GetResources -> GetResources -> Bool)
-> (GetResources -> GetResources -> Bool) -> Eq GetResources
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetResources -> GetResources -> Bool
$c/= :: GetResources -> GetResources -> Bool
== :: GetResources -> GetResources -> Bool
$c== :: GetResources -> GetResources -> Bool
Prelude.Eq, ReadPrec [GetResources]
ReadPrec GetResources
Int -> ReadS GetResources
ReadS [GetResources]
(Int -> ReadS GetResources)
-> ReadS [GetResources]
-> ReadPrec GetResources
-> ReadPrec [GetResources]
-> Read GetResources
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetResources]
$creadListPrec :: ReadPrec [GetResources]
readPrec :: ReadPrec GetResources
$creadPrec :: ReadPrec GetResources
readList :: ReadS [GetResources]
$creadList :: ReadS [GetResources]
readsPrec :: Int -> ReadS GetResources
$creadsPrec :: Int -> ReadS GetResources
Prelude.Read, Int -> GetResources -> ShowS
[GetResources] -> ShowS
GetResources -> String
(Int -> GetResources -> ShowS)
-> (GetResources -> String)
-> ([GetResources] -> ShowS)
-> Show GetResources
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetResources] -> ShowS
$cshowList :: [GetResources] -> ShowS
show :: GetResources -> String
$cshow :: GetResources -> String
showsPrec :: Int -> GetResources -> ShowS
$cshowsPrec :: Int -> GetResources -> ShowS
Prelude.Show, (forall x. GetResources -> Rep GetResources x)
-> (forall x. Rep GetResources x -> GetResources)
-> Generic GetResources
forall x. Rep GetResources x -> GetResources
forall x. GetResources -> Rep GetResources x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetResources x -> GetResources
$cfrom :: forall x. GetResources -> Rep GetResources x
Prelude.Generic)

-- |
-- Create a value of 'GetResources' 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:
--
-- 'paginationToken', 'getResources_paginationToken' - Specifies a @PaginationToken@ response value from a previous request to
-- indicate that you want the next page of results. Leave this parameter
-- empty in your initial request.
--
-- 'resourcesPerPage', 'getResources_resourcesPerPage' - Specifies the maximum number of results to be returned in each page. A
-- query can return fewer than this maximum, even if there are more results
-- still to return. You should always check the @PaginationToken@ response
-- value to see if there are more results. You can specify a minimum of 1
-- and a maximum value of 100.
--
-- 'excludeCompliantResources', 'getResources_excludeCompliantResources' - Specifies whether to exclude resources that are compliant with the tag
-- policy. Set this to @true@ if you are interested in retrieving
-- information on noncompliant resources only.
--
-- You can use this parameter only if the @IncludeComplianceDetails@
-- parameter is also set to @true@.
--
-- 'includeComplianceDetails', 'getResources_includeComplianceDetails' - Specifies whether to include details regarding the compliance with the
-- effective tag policy. Set this to @true@ to determine whether resources
-- are compliant with the tag policy and to get details.
--
-- 'resourceTypeFilters', 'getResources_resourceTypeFilters' - Specifies the resource types that you want included in the response. The
-- format of each resource type is @service[:resourceType]@. For example,
-- specifying a resource type of @ec2@ returns all Amazon EC2 resources
-- (which includes EC2 instances). Specifying a resource type of
-- @ec2:instance@ returns only EC2 instances.
--
-- The string for each service name and resource type is the same as that
-- embedded in a resource\'s Amazon Resource Name (ARN). Consult the /AWS
-- General Reference/ for the following:
--
-- For more information about ARNs, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces>.
--
-- You can specify multiple resource types by using an array. The array can
-- include up to 100 items. Note that the length constraint requirement
-- applies to each resource type filter.
--
-- 'tagFilters', 'getResources_tagFilters' - Specifies a list of TagFilters (keys and values) to restrict the output
-- to only those resources that have the specified tag and, if included,
-- the specified value. Each @TagFilter@ must contain a key with values
-- optional. A request can include up to 50 keys, and each key can include
-- up to 20 values.
--
-- Note the following when deciding how to use TagFilters:
--
-- -   If you /don\'t/ specify a @TagFilter@, the response includes all
--     resources that are currently tagged or ever had a tag. Resources
--     that currently don\'t have tags are shown with an empty tag set,
--     like this: @\"Tags\": []@.
--
-- -   If you specify more than one filter in a single request, the
--     response returns only those resources that satisfy all filters.
--
-- -   If you specify a filter that contains more than one value for a key,
--     the response returns resources that match any of the specified
--     values for that key.
--
-- -   If you don\'t specify any values for a key, the response returns
--     resources that are tagged with that key and any or no value.
--
--     For example, for the following filters: @filter1= {keyA,{value1}}@,
--     @filter2={keyB,{value2,value3,value4}}@, @filter3= {keyC}@:
--
--     -   @GetResources({filter1})@ returns resources tagged with
--         @key1=value1@
--
--     -   @GetResources({filter2})@ returns resources tagged with
--         @key2=value2@ or @key2=value3@ or @key2=value4@
--
--     -   @GetResources({filter3})@ returns resources tagged with any tag
--         with the key @key3@, and with any or no value
--
--     -   @GetResources({filter1,filter2,filter3})@ returns resources
--         tagged with
--         @(key1=value1) and (key2=value2 or key2=value3 or key2=value4) and (key3, any or no value)@
--
-- 'resourceARNList', 'getResources_resourceARNList' - Specifies a list of ARNs of resources for which you want to retrieve tag
-- data. You can\'t specify both this parameter and any of the pagination
-- parameters (@ResourcesPerPage@, @TagsPerPage@, @PaginationToken@) in the
-- same request. If you specify both, you get an @Invalid Parameter@
-- exception.
--
-- If a resource specified by this parameter doesn\'t exist, it doesn\'t
-- generate an error; it simply isn\'t included in the response.
--
-- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
-- information, see
-- <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces>
-- in the /AWS General Reference/.
--
-- 'tagsPerPage', 'getResources_tagsPerPage' - AWS recommends using @ResourcesPerPage@ instead of this parameter.
--
-- A limit that restricts the number of tags (key and value pairs) returned
-- by @GetResources@ in paginated output. A resource with no tags is
-- counted as having one tag (one key and value pair).
--
-- @GetResources@ does not split a resource and its associated tags across
-- pages. If the specified @TagsPerPage@ would cause such a break, a
-- @PaginationToken@ is returned in place of the affected resource and its
-- tags. Use that token in another request to get the remaining data. For
-- example, if you specify a @TagsPerPage@ of @100@ and the account has 22
-- resources with 10 tags each (meaning that each resource has 10 key and
-- value pairs), the output will consist of three pages. The first page
-- displays the first 10 resources, each with its 10 tags. The second page
-- displays the next 10 resources, each with its 10 tags. The third page
-- displays the remaining 2 resources, each with its 10 tags.
--
-- You can set @TagsPerPage@ to a minimum of 100 items up to a maximum of
-- 500 items.
newGetResources ::
  GetResources
newGetResources :: GetResources
newGetResources =
  GetResources' :: Maybe Text
-> Maybe Int
-> Maybe Bool
-> Maybe Bool
-> Maybe [Text]
-> Maybe [TagFilter]
-> Maybe (NonEmpty Text)
-> Maybe Int
-> GetResources
GetResources'
    { $sel:paginationToken:GetResources' :: Maybe Text
paginationToken = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:resourcesPerPage:GetResources' :: Maybe Int
resourcesPerPage = Maybe Int
forall a. Maybe a
Prelude.Nothing,
      $sel:excludeCompliantResources:GetResources' :: Maybe Bool
excludeCompliantResources = Maybe Bool
forall a. Maybe a
Prelude.Nothing,
      $sel:includeComplianceDetails:GetResources' :: Maybe Bool
includeComplianceDetails = Maybe Bool
forall a. Maybe a
Prelude.Nothing,
      $sel:resourceTypeFilters:GetResources' :: Maybe [Text]
resourceTypeFilters = Maybe [Text]
forall a. Maybe a
Prelude.Nothing,
      $sel:tagFilters:GetResources' :: Maybe [TagFilter]
tagFilters = Maybe [TagFilter]
forall a. Maybe a
Prelude.Nothing,
      $sel:resourceARNList:GetResources' :: Maybe (NonEmpty Text)
resourceARNList = Maybe (NonEmpty Text)
forall a. Maybe a
Prelude.Nothing,
      $sel:tagsPerPage:GetResources' :: Maybe Int
tagsPerPage = Maybe Int
forall a. Maybe a
Prelude.Nothing
    }

-- | Specifies a @PaginationToken@ response value from a previous request to
-- indicate that you want the next page of results. Leave this parameter
-- empty in your initial request.
getResources_paginationToken :: Lens.Lens' GetResources (Prelude.Maybe Prelude.Text)
getResources_paginationToken :: (Maybe Text -> f (Maybe Text)) -> GetResources -> f GetResources
getResources_paginationToken = (GetResources -> Maybe Text)
-> (GetResources -> Maybe Text -> GetResources)
-> Lens GetResources GetResources (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResources' {Maybe Text
paginationToken :: Maybe Text
$sel:paginationToken:GetResources' :: GetResources -> Maybe Text
paginationToken} -> Maybe Text
paginationToken) (\s :: GetResources
s@GetResources' {} Maybe Text
a -> GetResources
s {$sel:paginationToken:GetResources' :: Maybe Text
paginationToken = Maybe Text
a} :: GetResources)

-- | Specifies the maximum number of results to be returned in each page. A
-- query can return fewer than this maximum, even if there are more results
-- still to return. You should always check the @PaginationToken@ response
-- value to see if there are more results. You can specify a minimum of 1
-- and a maximum value of 100.
getResources_resourcesPerPage :: Lens.Lens' GetResources (Prelude.Maybe Prelude.Int)
getResources_resourcesPerPage :: (Maybe Int -> f (Maybe Int)) -> GetResources -> f GetResources
getResources_resourcesPerPage = (GetResources -> Maybe Int)
-> (GetResources -> Maybe Int -> GetResources)
-> Lens GetResources GetResources (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResources' {Maybe Int
resourcesPerPage :: Maybe Int
$sel:resourcesPerPage:GetResources' :: GetResources -> Maybe Int
resourcesPerPage} -> Maybe Int
resourcesPerPage) (\s :: GetResources
s@GetResources' {} Maybe Int
a -> GetResources
s {$sel:resourcesPerPage:GetResources' :: Maybe Int
resourcesPerPage = Maybe Int
a} :: GetResources)

-- | Specifies whether to exclude resources that are compliant with the tag
-- policy. Set this to @true@ if you are interested in retrieving
-- information on noncompliant resources only.
--
-- You can use this parameter only if the @IncludeComplianceDetails@
-- parameter is also set to @true@.
getResources_excludeCompliantResources :: Lens.Lens' GetResources (Prelude.Maybe Prelude.Bool)
getResources_excludeCompliantResources :: (Maybe Bool -> f (Maybe Bool)) -> GetResources -> f GetResources
getResources_excludeCompliantResources = (GetResources -> Maybe Bool)
-> (GetResources -> Maybe Bool -> GetResources)
-> Lens GetResources GetResources (Maybe Bool) (Maybe Bool)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResources' {Maybe Bool
excludeCompliantResources :: Maybe Bool
$sel:excludeCompliantResources:GetResources' :: GetResources -> Maybe Bool
excludeCompliantResources} -> Maybe Bool
excludeCompliantResources) (\s :: GetResources
s@GetResources' {} Maybe Bool
a -> GetResources
s {$sel:excludeCompliantResources:GetResources' :: Maybe Bool
excludeCompliantResources = Maybe Bool
a} :: GetResources)

-- | Specifies whether to include details regarding the compliance with the
-- effective tag policy. Set this to @true@ to determine whether resources
-- are compliant with the tag policy and to get details.
getResources_includeComplianceDetails :: Lens.Lens' GetResources (Prelude.Maybe Prelude.Bool)
getResources_includeComplianceDetails :: (Maybe Bool -> f (Maybe Bool)) -> GetResources -> f GetResources
getResources_includeComplianceDetails = (GetResources -> Maybe Bool)
-> (GetResources -> Maybe Bool -> GetResources)
-> Lens GetResources GetResources (Maybe Bool) (Maybe Bool)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResources' {Maybe Bool
includeComplianceDetails :: Maybe Bool
$sel:includeComplianceDetails:GetResources' :: GetResources -> Maybe Bool
includeComplianceDetails} -> Maybe Bool
includeComplianceDetails) (\s :: GetResources
s@GetResources' {} Maybe Bool
a -> GetResources
s {$sel:includeComplianceDetails:GetResources' :: Maybe Bool
includeComplianceDetails = Maybe Bool
a} :: GetResources)

-- | Specifies the resource types that you want included in the response. The
-- format of each resource type is @service[:resourceType]@. For example,
-- specifying a resource type of @ec2@ returns all Amazon EC2 resources
-- (which includes EC2 instances). Specifying a resource type of
-- @ec2:instance@ returns only EC2 instances.
--
-- The string for each service name and resource type is the same as that
-- embedded in a resource\'s Amazon Resource Name (ARN). Consult the /AWS
-- General Reference/ for the following:
--
-- For more information about ARNs, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces>.
--
-- You can specify multiple resource types by using an array. The array can
-- include up to 100 items. Note that the length constraint requirement
-- applies to each resource type filter.
getResources_resourceTypeFilters :: Lens.Lens' GetResources (Prelude.Maybe [Prelude.Text])
getResources_resourceTypeFilters :: (Maybe [Text] -> f (Maybe [Text]))
-> GetResources -> f GetResources
getResources_resourceTypeFilters = (GetResources -> Maybe [Text])
-> (GetResources -> Maybe [Text] -> GetResources)
-> Lens GetResources GetResources (Maybe [Text]) (Maybe [Text])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResources' {Maybe [Text]
resourceTypeFilters :: Maybe [Text]
$sel:resourceTypeFilters:GetResources' :: GetResources -> Maybe [Text]
resourceTypeFilters} -> Maybe [Text]
resourceTypeFilters) (\s :: GetResources
s@GetResources' {} Maybe [Text]
a -> GetResources
s {$sel:resourceTypeFilters:GetResources' :: Maybe [Text]
resourceTypeFilters = Maybe [Text]
a} :: GetResources) ((Maybe [Text] -> f (Maybe [Text]))
 -> GetResources -> f GetResources)
-> ((Maybe [Text] -> f (Maybe [Text]))
    -> Maybe [Text] -> f (Maybe [Text]))
-> (Maybe [Text] -> f (Maybe [Text]))
-> GetResources
-> f GetResources
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [Text] [Text] [Text] [Text]
-> Iso (Maybe [Text]) (Maybe [Text]) (Maybe [Text]) (Maybe [Text])
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 AnIso [Text] [Text] [Text] [Text]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Specifies a list of TagFilters (keys and values) to restrict the output
-- to only those resources that have the specified tag and, if included,
-- the specified value. Each @TagFilter@ must contain a key with values
-- optional. A request can include up to 50 keys, and each key can include
-- up to 20 values.
--
-- Note the following when deciding how to use TagFilters:
--
-- -   If you /don\'t/ specify a @TagFilter@, the response includes all
--     resources that are currently tagged or ever had a tag. Resources
--     that currently don\'t have tags are shown with an empty tag set,
--     like this: @\"Tags\": []@.
--
-- -   If you specify more than one filter in a single request, the
--     response returns only those resources that satisfy all filters.
--
-- -   If you specify a filter that contains more than one value for a key,
--     the response returns resources that match any of the specified
--     values for that key.
--
-- -   If you don\'t specify any values for a key, the response returns
--     resources that are tagged with that key and any or no value.
--
--     For example, for the following filters: @filter1= {keyA,{value1}}@,
--     @filter2={keyB,{value2,value3,value4}}@, @filter3= {keyC}@:
--
--     -   @GetResources({filter1})@ returns resources tagged with
--         @key1=value1@
--
--     -   @GetResources({filter2})@ returns resources tagged with
--         @key2=value2@ or @key2=value3@ or @key2=value4@
--
--     -   @GetResources({filter3})@ returns resources tagged with any tag
--         with the key @key3@, and with any or no value
--
--     -   @GetResources({filter1,filter2,filter3})@ returns resources
--         tagged with
--         @(key1=value1) and (key2=value2 or key2=value3 or key2=value4) and (key3, any or no value)@
getResources_tagFilters :: Lens.Lens' GetResources (Prelude.Maybe [TagFilter])
getResources_tagFilters :: (Maybe [TagFilter] -> f (Maybe [TagFilter]))
-> GetResources -> f GetResources
getResources_tagFilters = (GetResources -> Maybe [TagFilter])
-> (GetResources -> Maybe [TagFilter] -> GetResources)
-> Lens
     GetResources GetResources (Maybe [TagFilter]) (Maybe [TagFilter])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResources' {Maybe [TagFilter]
tagFilters :: Maybe [TagFilter]
$sel:tagFilters:GetResources' :: GetResources -> Maybe [TagFilter]
tagFilters} -> Maybe [TagFilter]
tagFilters) (\s :: GetResources
s@GetResources' {} Maybe [TagFilter]
a -> GetResources
s {$sel:tagFilters:GetResources' :: Maybe [TagFilter]
tagFilters = Maybe [TagFilter]
a} :: GetResources) ((Maybe [TagFilter] -> f (Maybe [TagFilter]))
 -> GetResources -> f GetResources)
-> ((Maybe [TagFilter] -> f (Maybe [TagFilter]))
    -> Maybe [TagFilter] -> f (Maybe [TagFilter]))
-> (Maybe [TagFilter] -> f (Maybe [TagFilter]))
-> GetResources
-> f GetResources
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso [TagFilter] [TagFilter] [TagFilter] [TagFilter]
-> Iso
     (Maybe [TagFilter])
     (Maybe [TagFilter])
     (Maybe [TagFilter])
     (Maybe [TagFilter])
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 AnIso [TagFilter] [TagFilter] [TagFilter] [TagFilter]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Specifies a list of ARNs of resources for which you want to retrieve tag
-- data. You can\'t specify both this parameter and any of the pagination
-- parameters (@ResourcesPerPage@, @TagsPerPage@, @PaginationToken@) in the
-- same request. If you specify both, you get an @Invalid Parameter@
-- exception.
--
-- If a resource specified by this parameter doesn\'t exist, it doesn\'t
-- generate an error; it simply isn\'t included in the response.
--
-- An ARN (Amazon Resource Name) uniquely identifies a resource. For more
-- information, see
-- <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces>
-- in the /AWS General Reference/.
getResources_resourceARNList :: Lens.Lens' GetResources (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
getResources_resourceARNList :: (Maybe (NonEmpty Text) -> f (Maybe (NonEmpty Text)))
-> GetResources -> f GetResources
getResources_resourceARNList = (GetResources -> Maybe (NonEmpty Text))
-> (GetResources -> Maybe (NonEmpty Text) -> GetResources)
-> Lens
     GetResources
     GetResources
     (Maybe (NonEmpty Text))
     (Maybe (NonEmpty Text))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResources' {Maybe (NonEmpty Text)
resourceARNList :: Maybe (NonEmpty Text)
$sel:resourceARNList:GetResources' :: GetResources -> Maybe (NonEmpty Text)
resourceARNList} -> Maybe (NonEmpty Text)
resourceARNList) (\s :: GetResources
s@GetResources' {} Maybe (NonEmpty Text)
a -> GetResources
s {$sel:resourceARNList:GetResources' :: Maybe (NonEmpty Text)
resourceARNList = Maybe (NonEmpty Text)
a} :: GetResources) ((Maybe (NonEmpty Text) -> f (Maybe (NonEmpty Text)))
 -> GetResources -> f GetResources)
-> ((Maybe (NonEmpty Text) -> f (Maybe (NonEmpty Text)))
    -> Maybe (NonEmpty Text) -> f (Maybe (NonEmpty Text)))
-> (Maybe (NonEmpty Text) -> f (Maybe (NonEmpty Text)))
-> GetResources
-> f GetResources
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  (NonEmpty Text) (NonEmpty Text) (NonEmpty Text) (NonEmpty Text)
-> Iso
     (Maybe (NonEmpty Text))
     (Maybe (NonEmpty Text))
     (Maybe (NonEmpty Text))
     (Maybe (NonEmpty Text))
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 AnIso
  (NonEmpty Text) (NonEmpty Text) (NonEmpty Text) (NonEmpty Text)
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | AWS recommends using @ResourcesPerPage@ instead of this parameter.
--
-- A limit that restricts the number of tags (key and value pairs) returned
-- by @GetResources@ in paginated output. A resource with no tags is
-- counted as having one tag (one key and value pair).
--
-- @GetResources@ does not split a resource and its associated tags across
-- pages. If the specified @TagsPerPage@ would cause such a break, a
-- @PaginationToken@ is returned in place of the affected resource and its
-- tags. Use that token in another request to get the remaining data. For
-- example, if you specify a @TagsPerPage@ of @100@ and the account has 22
-- resources with 10 tags each (meaning that each resource has 10 key and
-- value pairs), the output will consist of three pages. The first page
-- displays the first 10 resources, each with its 10 tags. The second page
-- displays the next 10 resources, each with its 10 tags. The third page
-- displays the remaining 2 resources, each with its 10 tags.
--
-- You can set @TagsPerPage@ to a minimum of 100 items up to a maximum of
-- 500 items.
getResources_tagsPerPage :: Lens.Lens' GetResources (Prelude.Maybe Prelude.Int)
getResources_tagsPerPage :: (Maybe Int -> f (Maybe Int)) -> GetResources -> f GetResources
getResources_tagsPerPage = (GetResources -> Maybe Int)
-> (GetResources -> Maybe Int -> GetResources)
-> Lens GetResources GetResources (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResources' {Maybe Int
tagsPerPage :: Maybe Int
$sel:tagsPerPage:GetResources' :: GetResources -> Maybe Int
tagsPerPage} -> Maybe Int
tagsPerPage) (\s :: GetResources
s@GetResources' {} Maybe Int
a -> GetResources
s {$sel:tagsPerPage:GetResources' :: Maybe Int
tagsPerPage = Maybe Int
a} :: GetResources)

instance Core.AWSPager GetResources where
  page :: GetResources -> AWSResponse GetResources -> Maybe GetResources
page GetResources
rq AWSResponse GetResources
rs
    | Maybe Text -> Bool
forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse GetResources
GetResourcesResponse
rs
            GetResourcesResponse
-> Getting (First Text) GetResourcesResponse Text -> Maybe Text
forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? (Maybe Text -> Const (First Text) (Maybe Text))
-> GetResourcesResponse -> Const (First Text) GetResourcesResponse
Lens' GetResourcesResponse (Maybe Text)
getResourcesResponse_paginationToken
              ((Maybe Text -> Const (First Text) (Maybe Text))
 -> GetResourcesResponse -> Const (First Text) GetResourcesResponse)
-> ((Text -> Const (First Text) Text)
    -> Maybe Text -> Const (First Text) (Maybe Text))
-> Getting (First Text) GetResourcesResponse Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. (Text -> Const (First Text) Text)
-> Maybe Text -> Const (First Text) (Maybe Text)
forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
      Maybe GetResources
forall a. Maybe a
Prelude.Nothing
    | Maybe [ResourceTagMapping] -> Bool
forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse GetResources
GetResourcesResponse
rs
            GetResourcesResponse
-> Getting
     (First [ResourceTagMapping])
     GetResourcesResponse
     [ResourceTagMapping]
-> Maybe [ResourceTagMapping]
forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? (Maybe [ResourceTagMapping]
 -> Const (First [ResourceTagMapping]) (Maybe [ResourceTagMapping]))
-> GetResourcesResponse
-> Const (First [ResourceTagMapping]) GetResourcesResponse
Lens' GetResourcesResponse (Maybe [ResourceTagMapping])
getResourcesResponse_resourceTagMappingList
              ((Maybe [ResourceTagMapping]
  -> Const (First [ResourceTagMapping]) (Maybe [ResourceTagMapping]))
 -> GetResourcesResponse
 -> Const (First [ResourceTagMapping]) GetResourcesResponse)
-> (([ResourceTagMapping]
     -> Const (First [ResourceTagMapping]) [ResourceTagMapping])
    -> Maybe [ResourceTagMapping]
    -> Const (First [ResourceTagMapping]) (Maybe [ResourceTagMapping]))
-> Getting
     (First [ResourceTagMapping])
     GetResourcesResponse
     [ResourceTagMapping]
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. ([ResourceTagMapping]
 -> Const (First [ResourceTagMapping]) [ResourceTagMapping])
-> Maybe [ResourceTagMapping]
-> Const (First [ResourceTagMapping]) (Maybe [ResourceTagMapping])
forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
      Maybe GetResources
forall a. Maybe a
Prelude.Nothing
    | Bool
Prelude.otherwise =
      GetResources -> Maybe GetResources
forall a. a -> Maybe a
Prelude.Just (GetResources -> Maybe GetResources)
-> GetResources -> Maybe GetResources
forall a b. (a -> b) -> a -> b
Prelude.$
        GetResources
rq
          GetResources -> (GetResources -> GetResources) -> GetResources
forall a b. a -> (a -> b) -> b
Prelude.& (Maybe Text -> Identity (Maybe Text))
-> GetResources -> Identity GetResources
Lens GetResources GetResources (Maybe Text) (Maybe Text)
getResources_paginationToken
          ((Maybe Text -> Identity (Maybe Text))
 -> GetResources -> Identity GetResources)
-> Maybe Text -> GetResources -> GetResources
forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse GetResources
GetResourcesResponse
rs
          GetResourcesResponse
-> Getting (First Text) GetResourcesResponse Text -> Maybe Text
forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? (Maybe Text -> Const (First Text) (Maybe Text))
-> GetResourcesResponse -> Const (First Text) GetResourcesResponse
Lens' GetResourcesResponse (Maybe Text)
getResourcesResponse_paginationToken
            ((Maybe Text -> Const (First Text) (Maybe Text))
 -> GetResourcesResponse -> Const (First Text) GetResourcesResponse)
-> ((Text -> Const (First Text) Text)
    -> Maybe Text -> Const (First Text) (Maybe Text))
-> Getting (First Text) GetResourcesResponse Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. (Text -> Const (First Text) Text)
-> Maybe Text -> Const (First Text) (Maybe Text)
forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just

instance Core.AWSRequest GetResources where
  type AWSResponse GetResources = GetResourcesResponse
  request :: GetResources -> Request GetResources
request = Service -> GetResources -> Request GetResources
forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON Service
defaultService
  response :: Logger
-> Service
-> Proxy GetResources
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetResources)))
response =
    (Int
 -> ResponseHeaders
 -> Object
 -> Either String (AWSResponse GetResources))
-> Logger
-> Service
-> Proxy GetResources
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetResources)))
forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> Logger
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe Text
-> Maybe [ResourceTagMapping] -> Int -> GetResourcesResponse
GetResourcesResponse'
            (Maybe Text
 -> Maybe [ResourceTagMapping] -> Int -> GetResourcesResponse)
-> Either String (Maybe Text)
-> Either
     String (Maybe [ResourceTagMapping] -> Int -> GetResourcesResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x Object -> Text -> Either String (Maybe Text)
forall a. FromJSON a => Object -> Text -> Either String (Maybe a)
Core..?> Text
"PaginationToken")
            Either
  String (Maybe [ResourceTagMapping] -> Int -> GetResourcesResponse)
-> Either String (Maybe [ResourceTagMapping])
-> Either String (Int -> GetResourcesResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x Object
-> Text -> Either String (Maybe (Maybe [ResourceTagMapping]))
forall a. FromJSON a => Object -> Text -> Either String (Maybe a)
Core..?> Text
"ResourceTagMappingList"
                            Either String (Maybe (Maybe [ResourceTagMapping]))
-> Maybe [ResourceTagMapping]
-> Either String (Maybe [ResourceTagMapping])
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ Maybe [ResourceTagMapping]
forall a. Monoid a => a
Prelude.mempty
                        )
            Either String (Int -> GetResourcesResponse)
-> Either String Int -> Either String GetResourcesResponse
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Int -> Either String Int
forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (Int -> Int
forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable GetResources

instance Prelude.NFData GetResources

instance Core.ToHeaders GetResources where
  toHeaders :: GetResources -> ResponseHeaders
toHeaders =
    ResponseHeaders -> GetResources -> ResponseHeaders
forall a b. a -> b -> a
Prelude.const
      ( [ResponseHeaders] -> ResponseHeaders
forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              HeaderName -> ByteString -> ResponseHeaders
forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Core.=# ( ByteString
"ResourceGroupsTaggingAPI_20170126.GetResources" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              HeaderName -> ByteString -> ResponseHeaders
forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Core.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Core.ToJSON GetResources where
  toJSON :: GetResources -> Value
toJSON GetResources' {Maybe Bool
Maybe Int
Maybe [Text]
Maybe [TagFilter]
Maybe (NonEmpty Text)
Maybe Text
tagsPerPage :: Maybe Int
resourceARNList :: Maybe (NonEmpty Text)
tagFilters :: Maybe [TagFilter]
resourceTypeFilters :: Maybe [Text]
includeComplianceDetails :: Maybe Bool
excludeCompliantResources :: Maybe Bool
resourcesPerPage :: Maybe Int
paginationToken :: Maybe Text
$sel:tagsPerPage:GetResources' :: GetResources -> Maybe Int
$sel:resourceARNList:GetResources' :: GetResources -> Maybe (NonEmpty Text)
$sel:tagFilters:GetResources' :: GetResources -> Maybe [TagFilter]
$sel:resourceTypeFilters:GetResources' :: GetResources -> Maybe [Text]
$sel:includeComplianceDetails:GetResources' :: GetResources -> Maybe Bool
$sel:excludeCompliantResources:GetResources' :: GetResources -> Maybe Bool
$sel:resourcesPerPage:GetResources' :: GetResources -> Maybe Int
$sel:paginationToken:GetResources' :: GetResources -> Maybe Text
..} =
    [Pair] -> Value
Core.object
      ( [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Text
"PaginationToken" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
paginationToken,
            (Text
"ResourcesPerPage" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Int -> Pair) -> Maybe Int -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Int
resourcesPerPage,
            (Text
"ExcludeCompliantResources" Text -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Bool
excludeCompliantResources,
            (Text
"IncludeComplianceDetails" Text -> Bool -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Bool -> Pair) -> Maybe Bool -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Bool
includeComplianceDetails,
            (Text
"ResourceTypeFilters" Text -> [Text] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              ([Text] -> Pair) -> Maybe [Text] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [Text]
resourceTypeFilters,
            (Text
"TagFilters" Text -> [TagFilter] -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) ([TagFilter] -> Pair) -> Maybe [TagFilter] -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [TagFilter]
tagFilters,
            (Text
"ResourceARNList" Text -> NonEmpty Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (NonEmpty Text -> Pair) -> Maybe (NonEmpty Text) -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (NonEmpty Text)
resourceARNList,
            (Text
"TagsPerPage" Text -> Int -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (Int -> Pair) -> Maybe Int -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Int
tagsPerPage
          ]
      )

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

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

-- | /See:/ 'newGetResourcesResponse' smart constructor.
data GetResourcesResponse = GetResourcesResponse'
  { -- | A string that indicates that there is more data available than this
    -- response contains. To receive the next part of the response, specify
    -- this response value as the @PaginationToken@ value in the request for
    -- the next page.
    GetResourcesResponse -> Maybe Text
paginationToken :: Prelude.Maybe Prelude.Text,
    -- | A list of resource ARNs and the tags (keys and values) associated with
    -- those ARNs.
    GetResourcesResponse -> Maybe [ResourceTagMapping]
resourceTagMappingList :: Prelude.Maybe [ResourceTagMapping],
    -- | The response's http status code.
    GetResourcesResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetResourcesResponse -> GetResourcesResponse -> Bool
(GetResourcesResponse -> GetResourcesResponse -> Bool)
-> (GetResourcesResponse -> GetResourcesResponse -> Bool)
-> Eq GetResourcesResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetResourcesResponse -> GetResourcesResponse -> Bool
$c/= :: GetResourcesResponse -> GetResourcesResponse -> Bool
== :: GetResourcesResponse -> GetResourcesResponse -> Bool
$c== :: GetResourcesResponse -> GetResourcesResponse -> Bool
Prelude.Eq, ReadPrec [GetResourcesResponse]
ReadPrec GetResourcesResponse
Int -> ReadS GetResourcesResponse
ReadS [GetResourcesResponse]
(Int -> ReadS GetResourcesResponse)
-> ReadS [GetResourcesResponse]
-> ReadPrec GetResourcesResponse
-> ReadPrec [GetResourcesResponse]
-> Read GetResourcesResponse
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetResourcesResponse]
$creadListPrec :: ReadPrec [GetResourcesResponse]
readPrec :: ReadPrec GetResourcesResponse
$creadPrec :: ReadPrec GetResourcesResponse
readList :: ReadS [GetResourcesResponse]
$creadList :: ReadS [GetResourcesResponse]
readsPrec :: Int -> ReadS GetResourcesResponse
$creadsPrec :: Int -> ReadS GetResourcesResponse
Prelude.Read, Int -> GetResourcesResponse -> ShowS
[GetResourcesResponse] -> ShowS
GetResourcesResponse -> String
(Int -> GetResourcesResponse -> ShowS)
-> (GetResourcesResponse -> String)
-> ([GetResourcesResponse] -> ShowS)
-> Show GetResourcesResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetResourcesResponse] -> ShowS
$cshowList :: [GetResourcesResponse] -> ShowS
show :: GetResourcesResponse -> String
$cshow :: GetResourcesResponse -> String
showsPrec :: Int -> GetResourcesResponse -> ShowS
$cshowsPrec :: Int -> GetResourcesResponse -> ShowS
Prelude.Show, (forall x. GetResourcesResponse -> Rep GetResourcesResponse x)
-> (forall x. Rep GetResourcesResponse x -> GetResourcesResponse)
-> Generic GetResourcesResponse
forall x. Rep GetResourcesResponse x -> GetResourcesResponse
forall x. GetResourcesResponse -> Rep GetResourcesResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetResourcesResponse x -> GetResourcesResponse
$cfrom :: forall x. GetResourcesResponse -> Rep GetResourcesResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetResourcesResponse' 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:
--
-- 'paginationToken', 'getResourcesResponse_paginationToken' - A string that indicates that there is more data available than this
-- response contains. To receive the next part of the response, specify
-- this response value as the @PaginationToken@ value in the request for
-- the next page.
--
-- 'resourceTagMappingList', 'getResourcesResponse_resourceTagMappingList' - A list of resource ARNs and the tags (keys and values) associated with
-- those ARNs.
--
-- 'httpStatus', 'getResourcesResponse_httpStatus' - The response's http status code.
newGetResourcesResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetResourcesResponse
newGetResourcesResponse :: Int -> GetResourcesResponse
newGetResourcesResponse Int
pHttpStatus_ =
  GetResourcesResponse' :: Maybe Text
-> Maybe [ResourceTagMapping] -> Int -> GetResourcesResponse
GetResourcesResponse'
    { $sel:paginationToken:GetResourcesResponse' :: Maybe Text
paginationToken =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:resourceTagMappingList:GetResourcesResponse' :: Maybe [ResourceTagMapping]
resourceTagMappingList = Maybe [ResourceTagMapping]
forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetResourcesResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | A string that indicates that there is more data available than this
-- response contains. To receive the next part of the response, specify
-- this response value as the @PaginationToken@ value in the request for
-- the next page.
getResourcesResponse_paginationToken :: Lens.Lens' GetResourcesResponse (Prelude.Maybe Prelude.Text)
getResourcesResponse_paginationToken :: (Maybe Text -> f (Maybe Text))
-> GetResourcesResponse -> f GetResourcesResponse
getResourcesResponse_paginationToken = (GetResourcesResponse -> Maybe Text)
-> (GetResourcesResponse -> Maybe Text -> GetResourcesResponse)
-> Lens' GetResourcesResponse (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourcesResponse' {Maybe Text
paginationToken :: Maybe Text
$sel:paginationToken:GetResourcesResponse' :: GetResourcesResponse -> Maybe Text
paginationToken} -> Maybe Text
paginationToken) (\s :: GetResourcesResponse
s@GetResourcesResponse' {} Maybe Text
a -> GetResourcesResponse
s {$sel:paginationToken:GetResourcesResponse' :: Maybe Text
paginationToken = Maybe Text
a} :: GetResourcesResponse)

-- | A list of resource ARNs and the tags (keys and values) associated with
-- those ARNs.
getResourcesResponse_resourceTagMappingList :: Lens.Lens' GetResourcesResponse (Prelude.Maybe [ResourceTagMapping])
getResourcesResponse_resourceTagMappingList :: (Maybe [ResourceTagMapping] -> f (Maybe [ResourceTagMapping]))
-> GetResourcesResponse -> f GetResourcesResponse
getResourcesResponse_resourceTagMappingList = (GetResourcesResponse -> Maybe [ResourceTagMapping])
-> (GetResourcesResponse
    -> Maybe [ResourceTagMapping] -> GetResourcesResponse)
-> Lens' GetResourcesResponse (Maybe [ResourceTagMapping])
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourcesResponse' {Maybe [ResourceTagMapping]
resourceTagMappingList :: Maybe [ResourceTagMapping]
$sel:resourceTagMappingList:GetResourcesResponse' :: GetResourcesResponse -> Maybe [ResourceTagMapping]
resourceTagMappingList} -> Maybe [ResourceTagMapping]
resourceTagMappingList) (\s :: GetResourcesResponse
s@GetResourcesResponse' {} Maybe [ResourceTagMapping]
a -> GetResourcesResponse
s {$sel:resourceTagMappingList:GetResourcesResponse' :: Maybe [ResourceTagMapping]
resourceTagMappingList = Maybe [ResourceTagMapping]
a} :: GetResourcesResponse) ((Maybe [ResourceTagMapping] -> f (Maybe [ResourceTagMapping]))
 -> GetResourcesResponse -> f GetResourcesResponse)
-> ((Maybe [ResourceTagMapping] -> f (Maybe [ResourceTagMapping]))
    -> Maybe [ResourceTagMapping] -> f (Maybe [ResourceTagMapping]))
-> (Maybe [ResourceTagMapping] -> f (Maybe [ResourceTagMapping]))
-> GetResourcesResponse
-> f GetResourcesResponse
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [ResourceTagMapping]
  [ResourceTagMapping]
  [ResourceTagMapping]
  [ResourceTagMapping]
-> Iso
     (Maybe [ResourceTagMapping])
     (Maybe [ResourceTagMapping])
     (Maybe [ResourceTagMapping])
     (Maybe [ResourceTagMapping])
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 AnIso
  [ResourceTagMapping]
  [ResourceTagMapping]
  [ResourceTagMapping]
  [ResourceTagMapping]
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

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

instance Prelude.NFData GetResourcesResponse