{-# 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.LookoutMetrics.ListMetricSets
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Lists the datasets in the current AWS Region.
--
-- Amazon Lookout for Metrics API actions are eventually consistent. If you
-- do a read operation on a resource immediately after creating or
-- modifying it, use retries to allow time for the write operation to
-- complete.
module Amazonka.LookoutMetrics.ListMetricSets
  ( -- * Creating a Request
    ListMetricSets (..),
    newListMetricSets,

    -- * Request Lenses
    listMetricSets_anomalyDetectorArn,
    listMetricSets_maxResults,
    listMetricSets_nextToken,

    -- * Destructuring the Response
    ListMetricSetsResponse (..),
    newListMetricSetsResponse,

    -- * Response Lenses
    listMetricSetsResponse_metricSetSummaryList,
    listMetricSetsResponse_nextToken,
    listMetricSetsResponse_httpStatus,
  )
where

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

-- | /See:/ 'newListMetricSets' smart constructor.
data ListMetricSets = ListMetricSets'
  { -- | The ARN of the anomaly detector containing the metrics sets to list.
    ListMetricSets -> Maybe Text
anomalyDetectorArn :: Prelude.Maybe Prelude.Text,
    -- | The maximum number of results to return.
    ListMetricSets -> Maybe Natural
maxResults :: Prelude.Maybe Prelude.Natural,
    -- | If the result of the previous request was truncated, the response
    -- includes a @NextToken@. To retrieve the next set of results, use the
    -- token in the next request. Tokens expire after 24 hours.
    ListMetricSets -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text
  }
  deriving (ListMetricSets -> ListMetricSets -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListMetricSets -> ListMetricSets -> Bool
$c/= :: ListMetricSets -> ListMetricSets -> Bool
== :: ListMetricSets -> ListMetricSets -> Bool
$c== :: ListMetricSets -> ListMetricSets -> Bool
Prelude.Eq, ReadPrec [ListMetricSets]
ReadPrec ListMetricSets
Int -> ReadS ListMetricSets
ReadS [ListMetricSets]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ListMetricSets]
$creadListPrec :: ReadPrec [ListMetricSets]
readPrec :: ReadPrec ListMetricSets
$creadPrec :: ReadPrec ListMetricSets
readList :: ReadS [ListMetricSets]
$creadList :: ReadS [ListMetricSets]
readsPrec :: Int -> ReadS ListMetricSets
$creadsPrec :: Int -> ReadS ListMetricSets
Prelude.Read, Int -> ListMetricSets -> ShowS
[ListMetricSets] -> ShowS
ListMetricSets -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListMetricSets] -> ShowS
$cshowList :: [ListMetricSets] -> ShowS
show :: ListMetricSets -> String
$cshow :: ListMetricSets -> String
showsPrec :: Int -> ListMetricSets -> ShowS
$cshowsPrec :: Int -> ListMetricSets -> ShowS
Prelude.Show, forall x. Rep ListMetricSets x -> ListMetricSets
forall x. ListMetricSets -> Rep ListMetricSets x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ListMetricSets x -> ListMetricSets
$cfrom :: forall x. ListMetricSets -> Rep ListMetricSets x
Prelude.Generic)

-- |
-- Create a value of 'ListMetricSets' 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:
--
-- 'anomalyDetectorArn', 'listMetricSets_anomalyDetectorArn' - The ARN of the anomaly detector containing the metrics sets to list.
--
-- 'maxResults', 'listMetricSets_maxResults' - The maximum number of results to return.
--
-- 'nextToken', 'listMetricSets_nextToken' - If the result of the previous request was truncated, the response
-- includes a @NextToken@. To retrieve the next set of results, use the
-- token in the next request. Tokens expire after 24 hours.
newListMetricSets ::
  ListMetricSets
newListMetricSets :: ListMetricSets
newListMetricSets =
  ListMetricSets'
    { $sel:anomalyDetectorArn:ListMetricSets' :: Maybe Text
anomalyDetectorArn =
        forall a. Maybe a
Prelude.Nothing,
      $sel:maxResults:ListMetricSets' :: Maybe Natural
maxResults = forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:ListMetricSets' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing
    }

-- | The ARN of the anomaly detector containing the metrics sets to list.
listMetricSets_anomalyDetectorArn :: Lens.Lens' ListMetricSets (Prelude.Maybe Prelude.Text)
listMetricSets_anomalyDetectorArn :: Lens' ListMetricSets (Maybe Text)
listMetricSets_anomalyDetectorArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListMetricSets' {Maybe Text
anomalyDetectorArn :: Maybe Text
$sel:anomalyDetectorArn:ListMetricSets' :: ListMetricSets -> Maybe Text
anomalyDetectorArn} -> Maybe Text
anomalyDetectorArn) (\s :: ListMetricSets
s@ListMetricSets' {} Maybe Text
a -> ListMetricSets
s {$sel:anomalyDetectorArn:ListMetricSets' :: Maybe Text
anomalyDetectorArn = Maybe Text
a} :: ListMetricSets)

-- | The maximum number of results to return.
listMetricSets_maxResults :: Lens.Lens' ListMetricSets (Prelude.Maybe Prelude.Natural)
listMetricSets_maxResults :: Lens' ListMetricSets (Maybe Natural)
listMetricSets_maxResults = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListMetricSets' {Maybe Natural
maxResults :: Maybe Natural
$sel:maxResults:ListMetricSets' :: ListMetricSets -> Maybe Natural
maxResults} -> Maybe Natural
maxResults) (\s :: ListMetricSets
s@ListMetricSets' {} Maybe Natural
a -> ListMetricSets
s {$sel:maxResults:ListMetricSets' :: Maybe Natural
maxResults = Maybe Natural
a} :: ListMetricSets)

-- | If the result of the previous request was truncated, the response
-- includes a @NextToken@. To retrieve the next set of results, use the
-- token in the next request. Tokens expire after 24 hours.
listMetricSets_nextToken :: Lens.Lens' ListMetricSets (Prelude.Maybe Prelude.Text)
listMetricSets_nextToken :: Lens' ListMetricSets (Maybe Text)
listMetricSets_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListMetricSets' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:ListMetricSets' :: ListMetricSets -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: ListMetricSets
s@ListMetricSets' {} Maybe Text
a -> ListMetricSets
s {$sel:nextToken:ListMetricSets' :: Maybe Text
nextToken = Maybe Text
a} :: ListMetricSets)

instance Core.AWSRequest ListMetricSets where
  type
    AWSResponse ListMetricSets =
      ListMetricSetsResponse
  request :: (Service -> Service) -> ListMetricSets -> Request ListMetricSets
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy ListMetricSets
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse ListMetricSets)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe [MetricSetSummary]
-> Maybe Text -> Int -> ListMetricSetsResponse
ListMetricSetsResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"MetricSetSummaryList"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"NextToken")
            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 ListMetricSets where
  hashWithSalt :: Int -> ListMetricSets -> Int
hashWithSalt Int
_salt ListMetricSets' {Maybe Natural
Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Natural
anomalyDetectorArn :: Maybe Text
$sel:nextToken:ListMetricSets' :: ListMetricSets -> Maybe Text
$sel:maxResults:ListMetricSets' :: ListMetricSets -> Maybe Natural
$sel:anomalyDetectorArn:ListMetricSets' :: ListMetricSets -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
anomalyDetectorArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
maxResults
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextToken

instance Prelude.NFData ListMetricSets where
  rnf :: ListMetricSets -> ()
rnf ListMetricSets' {Maybe Natural
Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Natural
anomalyDetectorArn :: Maybe Text
$sel:nextToken:ListMetricSets' :: ListMetricSets -> Maybe Text
$sel:maxResults:ListMetricSets' :: ListMetricSets -> Maybe Natural
$sel:anomalyDetectorArn:ListMetricSets' :: ListMetricSets -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
anomalyDetectorArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
maxResults
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken

instance Data.ToHeaders ListMetricSets where
  toHeaders :: ListMetricSets -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON ListMetricSets where
  toJSON :: ListMetricSets -> Value
toJSON ListMetricSets' {Maybe Natural
Maybe Text
nextToken :: Maybe Text
maxResults :: Maybe Natural
anomalyDetectorArn :: Maybe Text
$sel:nextToken:ListMetricSets' :: ListMetricSets -> Maybe Text
$sel:maxResults:ListMetricSets' :: ListMetricSets -> Maybe Natural
$sel:anomalyDetectorArn:ListMetricSets' :: ListMetricSets -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AnomalyDetectorArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
anomalyDetectorArn,
            (Key
"MaxResults" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
maxResults,
            (Key
"NextToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
nextToken
          ]
      )

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

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

-- | /See:/ 'newListMetricSetsResponse' smart constructor.
data ListMetricSetsResponse = ListMetricSetsResponse'
  { -- | A list of the datasets in the AWS Region, with configuration details for
    -- each.
    ListMetricSetsResponse -> Maybe [MetricSetSummary]
metricSetSummaryList :: Prelude.Maybe [MetricSetSummary],
    -- | If the response is truncated, the list call returns this token. To
    -- retrieve the next set of results, use the token in the next list
    -- request.
    ListMetricSetsResponse -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    ListMetricSetsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (ListMetricSetsResponse -> ListMetricSetsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListMetricSetsResponse -> ListMetricSetsResponse -> Bool
$c/= :: ListMetricSetsResponse -> ListMetricSetsResponse -> Bool
== :: ListMetricSetsResponse -> ListMetricSetsResponse -> Bool
$c== :: ListMetricSetsResponse -> ListMetricSetsResponse -> Bool
Prelude.Eq, ReadPrec [ListMetricSetsResponse]
ReadPrec ListMetricSetsResponse
Int -> ReadS ListMetricSetsResponse
ReadS [ListMetricSetsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ListMetricSetsResponse]
$creadListPrec :: ReadPrec [ListMetricSetsResponse]
readPrec :: ReadPrec ListMetricSetsResponse
$creadPrec :: ReadPrec ListMetricSetsResponse
readList :: ReadS [ListMetricSetsResponse]
$creadList :: ReadS [ListMetricSetsResponse]
readsPrec :: Int -> ReadS ListMetricSetsResponse
$creadsPrec :: Int -> ReadS ListMetricSetsResponse
Prelude.Read, Int -> ListMetricSetsResponse -> ShowS
[ListMetricSetsResponse] -> ShowS
ListMetricSetsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListMetricSetsResponse] -> ShowS
$cshowList :: [ListMetricSetsResponse] -> ShowS
show :: ListMetricSetsResponse -> String
$cshow :: ListMetricSetsResponse -> String
showsPrec :: Int -> ListMetricSetsResponse -> ShowS
$cshowsPrec :: Int -> ListMetricSetsResponse -> ShowS
Prelude.Show, forall x. Rep ListMetricSetsResponse x -> ListMetricSetsResponse
forall x. ListMetricSetsResponse -> Rep ListMetricSetsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ListMetricSetsResponse x -> ListMetricSetsResponse
$cfrom :: forall x. ListMetricSetsResponse -> Rep ListMetricSetsResponse x
Prelude.Generic)

-- |
-- Create a value of 'ListMetricSetsResponse' 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:
--
-- 'metricSetSummaryList', 'listMetricSetsResponse_metricSetSummaryList' - A list of the datasets in the AWS Region, with configuration details for
-- each.
--
-- 'nextToken', 'listMetricSetsResponse_nextToken' - If the response is truncated, the list call returns this token. To
-- retrieve the next set of results, use the token in the next list
-- request.
--
-- 'httpStatus', 'listMetricSetsResponse_httpStatus' - The response's http status code.
newListMetricSetsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  ListMetricSetsResponse
newListMetricSetsResponse :: Int -> ListMetricSetsResponse
newListMetricSetsResponse Int
pHttpStatus_ =
  ListMetricSetsResponse'
    { $sel:metricSetSummaryList:ListMetricSetsResponse' :: Maybe [MetricSetSummary]
metricSetSummaryList =
        forall a. Maybe a
Prelude.Nothing,
      $sel:nextToken:ListMetricSetsResponse' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:ListMetricSetsResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | A list of the datasets in the AWS Region, with configuration details for
-- each.
listMetricSetsResponse_metricSetSummaryList :: Lens.Lens' ListMetricSetsResponse (Prelude.Maybe [MetricSetSummary])
listMetricSetsResponse_metricSetSummaryList :: Lens' ListMetricSetsResponse (Maybe [MetricSetSummary])
listMetricSetsResponse_metricSetSummaryList = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListMetricSetsResponse' {Maybe [MetricSetSummary]
metricSetSummaryList :: Maybe [MetricSetSummary]
$sel:metricSetSummaryList:ListMetricSetsResponse' :: ListMetricSetsResponse -> Maybe [MetricSetSummary]
metricSetSummaryList} -> Maybe [MetricSetSummary]
metricSetSummaryList) (\s :: ListMetricSetsResponse
s@ListMetricSetsResponse' {} Maybe [MetricSetSummary]
a -> ListMetricSetsResponse
s {$sel:metricSetSummaryList:ListMetricSetsResponse' :: Maybe [MetricSetSummary]
metricSetSummaryList = Maybe [MetricSetSummary]
a} :: ListMetricSetsResponse) 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

-- | If the response is truncated, the list call returns this token. To
-- retrieve the next set of results, use the token in the next list
-- request.
listMetricSetsResponse_nextToken :: Lens.Lens' ListMetricSetsResponse (Prelude.Maybe Prelude.Text)
listMetricSetsResponse_nextToken :: Lens' ListMetricSetsResponse (Maybe Text)
listMetricSetsResponse_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListMetricSetsResponse' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:ListMetricSetsResponse' :: ListMetricSetsResponse -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: ListMetricSetsResponse
s@ListMetricSetsResponse' {} Maybe Text
a -> ListMetricSetsResponse
s {$sel:nextToken:ListMetricSetsResponse' :: Maybe Text
nextToken = Maybe Text
a} :: ListMetricSetsResponse)

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

instance Prelude.NFData ListMetricSetsResponse where
  rnf :: ListMetricSetsResponse -> ()
rnf ListMetricSetsResponse' {Int
Maybe [MetricSetSummary]
Maybe Text
httpStatus :: Int
nextToken :: Maybe Text
metricSetSummaryList :: Maybe [MetricSetSummary]
$sel:httpStatus:ListMetricSetsResponse' :: ListMetricSetsResponse -> Int
$sel:nextToken:ListMetricSetsResponse' :: ListMetricSetsResponse -> Maybe Text
$sel:metricSetSummaryList:ListMetricSetsResponse' :: ListMetricSetsResponse -> Maybe [MetricSetSummary]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [MetricSetSummary]
metricSetSummaryList
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus