{-# 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.ComputeOptimizer.GetECSServiceRecommendationProjectedMetrics
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns the projected metrics of Amazon ECS service recommendations.
module Amazonka.ComputeOptimizer.GetECSServiceRecommendationProjectedMetrics
  ( -- * Creating a Request
    GetECSServiceRecommendationProjectedMetrics (..),
    newGetECSServiceRecommendationProjectedMetrics,

    -- * Request Lenses
    getECSServiceRecommendationProjectedMetrics_serviceArn,
    getECSServiceRecommendationProjectedMetrics_stat,
    getECSServiceRecommendationProjectedMetrics_period,
    getECSServiceRecommendationProjectedMetrics_startTime,
    getECSServiceRecommendationProjectedMetrics_endTime,

    -- * Destructuring the Response
    GetECSServiceRecommendationProjectedMetricsResponse (..),
    newGetECSServiceRecommendationProjectedMetricsResponse,

    -- * Response Lenses
    getECSServiceRecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics,
    getECSServiceRecommendationProjectedMetricsResponse_httpStatus,
  )
where

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

-- | /See:/ 'newGetECSServiceRecommendationProjectedMetrics' smart constructor.
data GetECSServiceRecommendationProjectedMetrics = GetECSServiceRecommendationProjectedMetrics'
  { -- | The ARN that identifies the ECS service.
    --
    -- The following is the format of the ARN:
    --
    -- @arn:aws:ecs:region:aws_account_id:service\/cluster-name\/service-name@
    GetECSServiceRecommendationProjectedMetrics -> Text
serviceArn :: Prelude.Text,
    -- | The statistic of the projected metrics.
    GetECSServiceRecommendationProjectedMetrics -> MetricStatistic
stat :: MetricStatistic,
    -- | The granularity, in seconds, of the projected metrics data points.
    GetECSServiceRecommendationProjectedMetrics -> Int
period :: Prelude.Int,
    -- | The timestamp of the first projected metrics data point to return.
    GetECSServiceRecommendationProjectedMetrics -> POSIX
startTime :: Data.POSIX,
    -- | The timestamp of the last projected metrics data point to return.
    GetECSServiceRecommendationProjectedMetrics -> POSIX
endTime :: Data.POSIX
  }
  deriving (GetECSServiceRecommendationProjectedMetrics
-> GetECSServiceRecommendationProjectedMetrics -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetECSServiceRecommendationProjectedMetrics
-> GetECSServiceRecommendationProjectedMetrics -> Bool
$c/= :: GetECSServiceRecommendationProjectedMetrics
-> GetECSServiceRecommendationProjectedMetrics -> Bool
== :: GetECSServiceRecommendationProjectedMetrics
-> GetECSServiceRecommendationProjectedMetrics -> Bool
$c== :: GetECSServiceRecommendationProjectedMetrics
-> GetECSServiceRecommendationProjectedMetrics -> Bool
Prelude.Eq, ReadPrec [GetECSServiceRecommendationProjectedMetrics]
ReadPrec GetECSServiceRecommendationProjectedMetrics
Int -> ReadS GetECSServiceRecommendationProjectedMetrics
ReadS [GetECSServiceRecommendationProjectedMetrics]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetECSServiceRecommendationProjectedMetrics]
$creadListPrec :: ReadPrec [GetECSServiceRecommendationProjectedMetrics]
readPrec :: ReadPrec GetECSServiceRecommendationProjectedMetrics
$creadPrec :: ReadPrec GetECSServiceRecommendationProjectedMetrics
readList :: ReadS [GetECSServiceRecommendationProjectedMetrics]
$creadList :: ReadS [GetECSServiceRecommendationProjectedMetrics]
readsPrec :: Int -> ReadS GetECSServiceRecommendationProjectedMetrics
$creadsPrec :: Int -> ReadS GetECSServiceRecommendationProjectedMetrics
Prelude.Read, Int -> GetECSServiceRecommendationProjectedMetrics -> ShowS
[GetECSServiceRecommendationProjectedMetrics] -> ShowS
GetECSServiceRecommendationProjectedMetrics -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetECSServiceRecommendationProjectedMetrics] -> ShowS
$cshowList :: [GetECSServiceRecommendationProjectedMetrics] -> ShowS
show :: GetECSServiceRecommendationProjectedMetrics -> String
$cshow :: GetECSServiceRecommendationProjectedMetrics -> String
showsPrec :: Int -> GetECSServiceRecommendationProjectedMetrics -> ShowS
$cshowsPrec :: Int -> GetECSServiceRecommendationProjectedMetrics -> ShowS
Prelude.Show, forall x.
Rep GetECSServiceRecommendationProjectedMetrics x
-> GetECSServiceRecommendationProjectedMetrics
forall x.
GetECSServiceRecommendationProjectedMetrics
-> Rep GetECSServiceRecommendationProjectedMetrics x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetECSServiceRecommendationProjectedMetrics x
-> GetECSServiceRecommendationProjectedMetrics
$cfrom :: forall x.
GetECSServiceRecommendationProjectedMetrics
-> Rep GetECSServiceRecommendationProjectedMetrics x
Prelude.Generic)

-- |
-- Create a value of 'GetECSServiceRecommendationProjectedMetrics' 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:
--
-- 'serviceArn', 'getECSServiceRecommendationProjectedMetrics_serviceArn' - The ARN that identifies the ECS service.
--
-- The following is the format of the ARN:
--
-- @arn:aws:ecs:region:aws_account_id:service\/cluster-name\/service-name@
--
-- 'stat', 'getECSServiceRecommendationProjectedMetrics_stat' - The statistic of the projected metrics.
--
-- 'period', 'getECSServiceRecommendationProjectedMetrics_period' - The granularity, in seconds, of the projected metrics data points.
--
-- 'startTime', 'getECSServiceRecommendationProjectedMetrics_startTime' - The timestamp of the first projected metrics data point to return.
--
-- 'endTime', 'getECSServiceRecommendationProjectedMetrics_endTime' - The timestamp of the last projected metrics data point to return.
newGetECSServiceRecommendationProjectedMetrics ::
  -- | 'serviceArn'
  Prelude.Text ->
  -- | 'stat'
  MetricStatistic ->
  -- | 'period'
  Prelude.Int ->
  -- | 'startTime'
  Prelude.UTCTime ->
  -- | 'endTime'
  Prelude.UTCTime ->
  GetECSServiceRecommendationProjectedMetrics
newGetECSServiceRecommendationProjectedMetrics :: Text
-> MetricStatistic
-> Int
-> UTCTime
-> UTCTime
-> GetECSServiceRecommendationProjectedMetrics
newGetECSServiceRecommendationProjectedMetrics
  Text
pServiceArn_
  MetricStatistic
pStat_
  Int
pPeriod_
  UTCTime
pStartTime_
  UTCTime
pEndTime_ =
    GetECSServiceRecommendationProjectedMetrics'
      { $sel:serviceArn:GetECSServiceRecommendationProjectedMetrics' :: Text
serviceArn =
          Text
pServiceArn_,
        $sel:stat:GetECSServiceRecommendationProjectedMetrics' :: MetricStatistic
stat = MetricStatistic
pStat_,
        $sel:period:GetECSServiceRecommendationProjectedMetrics' :: Int
period = Int
pPeriod_,
        $sel:startTime:GetECSServiceRecommendationProjectedMetrics' :: POSIX
startTime =
          forall (a :: Format). Iso' (Time a) UTCTime
Data._Time
            forall t b. AReview t b -> b -> t
Lens.# UTCTime
pStartTime_,
        $sel:endTime:GetECSServiceRecommendationProjectedMetrics' :: POSIX
endTime =
          forall (a :: Format). Iso' (Time a) UTCTime
Data._Time forall t b. AReview t b -> b -> t
Lens.# UTCTime
pEndTime_
      }

-- | The ARN that identifies the ECS service.
--
-- The following is the format of the ARN:
--
-- @arn:aws:ecs:region:aws_account_id:service\/cluster-name\/service-name@
getECSServiceRecommendationProjectedMetrics_serviceArn :: Lens.Lens' GetECSServiceRecommendationProjectedMetrics Prelude.Text
getECSServiceRecommendationProjectedMetrics_serviceArn :: Lens' GetECSServiceRecommendationProjectedMetrics Text
getECSServiceRecommendationProjectedMetrics_serviceArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetECSServiceRecommendationProjectedMetrics' {Text
serviceArn :: Text
$sel:serviceArn:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> Text
serviceArn} -> Text
serviceArn) (\s :: GetECSServiceRecommendationProjectedMetrics
s@GetECSServiceRecommendationProjectedMetrics' {} Text
a -> GetECSServiceRecommendationProjectedMetrics
s {$sel:serviceArn:GetECSServiceRecommendationProjectedMetrics' :: Text
serviceArn = Text
a} :: GetECSServiceRecommendationProjectedMetrics)

-- | The statistic of the projected metrics.
getECSServiceRecommendationProjectedMetrics_stat :: Lens.Lens' GetECSServiceRecommendationProjectedMetrics MetricStatistic
getECSServiceRecommendationProjectedMetrics_stat :: Lens' GetECSServiceRecommendationProjectedMetrics MetricStatistic
getECSServiceRecommendationProjectedMetrics_stat = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetECSServiceRecommendationProjectedMetrics' {MetricStatistic
stat :: MetricStatistic
$sel:stat:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> MetricStatistic
stat} -> MetricStatistic
stat) (\s :: GetECSServiceRecommendationProjectedMetrics
s@GetECSServiceRecommendationProjectedMetrics' {} MetricStatistic
a -> GetECSServiceRecommendationProjectedMetrics
s {$sel:stat:GetECSServiceRecommendationProjectedMetrics' :: MetricStatistic
stat = MetricStatistic
a} :: GetECSServiceRecommendationProjectedMetrics)

-- | The granularity, in seconds, of the projected metrics data points.
getECSServiceRecommendationProjectedMetrics_period :: Lens.Lens' GetECSServiceRecommendationProjectedMetrics Prelude.Int
getECSServiceRecommendationProjectedMetrics_period :: Lens' GetECSServiceRecommendationProjectedMetrics Int
getECSServiceRecommendationProjectedMetrics_period = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetECSServiceRecommendationProjectedMetrics' {Int
period :: Int
$sel:period:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> Int
period} -> Int
period) (\s :: GetECSServiceRecommendationProjectedMetrics
s@GetECSServiceRecommendationProjectedMetrics' {} Int
a -> GetECSServiceRecommendationProjectedMetrics
s {$sel:period:GetECSServiceRecommendationProjectedMetrics' :: Int
period = Int
a} :: GetECSServiceRecommendationProjectedMetrics)

-- | The timestamp of the first projected metrics data point to return.
getECSServiceRecommendationProjectedMetrics_startTime :: Lens.Lens' GetECSServiceRecommendationProjectedMetrics Prelude.UTCTime
getECSServiceRecommendationProjectedMetrics_startTime :: Lens' GetECSServiceRecommendationProjectedMetrics UTCTime
getECSServiceRecommendationProjectedMetrics_startTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetECSServiceRecommendationProjectedMetrics' {POSIX
startTime :: POSIX
$sel:startTime:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> POSIX
startTime} -> POSIX
startTime) (\s :: GetECSServiceRecommendationProjectedMetrics
s@GetECSServiceRecommendationProjectedMetrics' {} POSIX
a -> GetECSServiceRecommendationProjectedMetrics
s {$sel:startTime:GetECSServiceRecommendationProjectedMetrics' :: POSIX
startTime = POSIX
a} :: GetECSServiceRecommendationProjectedMetrics) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The timestamp of the last projected metrics data point to return.
getECSServiceRecommendationProjectedMetrics_endTime :: Lens.Lens' GetECSServiceRecommendationProjectedMetrics Prelude.UTCTime
getECSServiceRecommendationProjectedMetrics_endTime :: Lens' GetECSServiceRecommendationProjectedMetrics UTCTime
getECSServiceRecommendationProjectedMetrics_endTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetECSServiceRecommendationProjectedMetrics' {POSIX
endTime :: POSIX
$sel:endTime:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> POSIX
endTime} -> POSIX
endTime) (\s :: GetECSServiceRecommendationProjectedMetrics
s@GetECSServiceRecommendationProjectedMetrics' {} POSIX
a -> GetECSServiceRecommendationProjectedMetrics
s {$sel:endTime:GetECSServiceRecommendationProjectedMetrics' :: POSIX
endTime = POSIX
a} :: GetECSServiceRecommendationProjectedMetrics) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

instance
  Core.AWSRequest
    GetECSServiceRecommendationProjectedMetrics
  where
  type
    AWSResponse
      GetECSServiceRecommendationProjectedMetrics =
      GetECSServiceRecommendationProjectedMetricsResponse
  request :: (Service -> Service)
-> GetECSServiceRecommendationProjectedMetrics
-> Request GetECSServiceRecommendationProjectedMetrics
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 GetECSServiceRecommendationProjectedMetrics
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse GetECSServiceRecommendationProjectedMetrics)))
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 [ECSServiceRecommendedOptionProjectedMetric]
-> Int -> GetECSServiceRecommendationProjectedMetricsResponse
GetECSServiceRecommendationProjectedMetricsResponse'
            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
"recommendedOptionProjectedMetrics"
                            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.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    GetECSServiceRecommendationProjectedMetrics
  where
  hashWithSalt :: Int -> GetECSServiceRecommendationProjectedMetrics -> Int
hashWithSalt
    Int
_salt
    GetECSServiceRecommendationProjectedMetrics' {Int
Text
POSIX
MetricStatistic
endTime :: POSIX
startTime :: POSIX
period :: Int
stat :: MetricStatistic
serviceArn :: Text
$sel:endTime:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> POSIX
$sel:startTime:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> POSIX
$sel:period:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> Int
$sel:stat:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> MetricStatistic
$sel:serviceArn:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
serviceArn
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` MetricStatistic
stat
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Int
period
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` POSIX
startTime
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` POSIX
endTime

instance
  Prelude.NFData
    GetECSServiceRecommendationProjectedMetrics
  where
  rnf :: GetECSServiceRecommendationProjectedMetrics -> ()
rnf GetECSServiceRecommendationProjectedMetrics' {Int
Text
POSIX
MetricStatistic
endTime :: POSIX
startTime :: POSIX
period :: Int
stat :: MetricStatistic
serviceArn :: Text
$sel:endTime:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> POSIX
$sel:startTime:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> POSIX
$sel:period:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> Int
$sel:stat:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> MetricStatistic
$sel:serviceArn:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
serviceArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf MetricStatistic
stat
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
period
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf POSIX
startTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf POSIX
endTime

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

instance
  Data.ToJSON
    GetECSServiceRecommendationProjectedMetrics
  where
  toJSON :: GetECSServiceRecommendationProjectedMetrics -> Value
toJSON
    GetECSServiceRecommendationProjectedMetrics' {Int
Text
POSIX
MetricStatistic
endTime :: POSIX
startTime :: POSIX
period :: Int
stat :: MetricStatistic
serviceArn :: Text
$sel:endTime:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> POSIX
$sel:startTime:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> POSIX
$sel:period:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> Int
$sel:stat:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> MetricStatistic
$sel:serviceArn:GetECSServiceRecommendationProjectedMetrics' :: GetECSServiceRecommendationProjectedMetrics -> Text
..} =
      [Pair] -> Value
Data.object
        ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
            [ forall a. a -> Maybe a
Prelude.Just (Key
"serviceArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
serviceArn),
              forall a. a -> Maybe a
Prelude.Just (Key
"stat" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= MetricStatistic
stat),
              forall a. a -> Maybe a
Prelude.Just (Key
"period" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Int
period),
              forall a. a -> Maybe a
Prelude.Just (Key
"startTime" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= POSIX
startTime),
              forall a. a -> Maybe a
Prelude.Just (Key
"endTime" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= POSIX
endTime)
            ]
        )

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

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

-- | /See:/ 'newGetECSServiceRecommendationProjectedMetricsResponse' smart constructor.
data GetECSServiceRecommendationProjectedMetricsResponse = GetECSServiceRecommendationProjectedMetricsResponse'
  { -- | An array of objects that describes the projected metrics.
    GetECSServiceRecommendationProjectedMetricsResponse
-> Maybe [ECSServiceRecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics :: Prelude.Maybe [ECSServiceRecommendedOptionProjectedMetric],
    -- | The response's http status code.
    GetECSServiceRecommendationProjectedMetricsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetECSServiceRecommendationProjectedMetricsResponse
-> GetECSServiceRecommendationProjectedMetricsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetECSServiceRecommendationProjectedMetricsResponse
-> GetECSServiceRecommendationProjectedMetricsResponse -> Bool
$c/= :: GetECSServiceRecommendationProjectedMetricsResponse
-> GetECSServiceRecommendationProjectedMetricsResponse -> Bool
== :: GetECSServiceRecommendationProjectedMetricsResponse
-> GetECSServiceRecommendationProjectedMetricsResponse -> Bool
$c== :: GetECSServiceRecommendationProjectedMetricsResponse
-> GetECSServiceRecommendationProjectedMetricsResponse -> Bool
Prelude.Eq, ReadPrec [GetECSServiceRecommendationProjectedMetricsResponse]
ReadPrec GetECSServiceRecommendationProjectedMetricsResponse
Int -> ReadS GetECSServiceRecommendationProjectedMetricsResponse
ReadS [GetECSServiceRecommendationProjectedMetricsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetECSServiceRecommendationProjectedMetricsResponse]
$creadListPrec :: ReadPrec [GetECSServiceRecommendationProjectedMetricsResponse]
readPrec :: ReadPrec GetECSServiceRecommendationProjectedMetricsResponse
$creadPrec :: ReadPrec GetECSServiceRecommendationProjectedMetricsResponse
readList :: ReadS [GetECSServiceRecommendationProjectedMetricsResponse]
$creadList :: ReadS [GetECSServiceRecommendationProjectedMetricsResponse]
readsPrec :: Int -> ReadS GetECSServiceRecommendationProjectedMetricsResponse
$creadsPrec :: Int -> ReadS GetECSServiceRecommendationProjectedMetricsResponse
Prelude.Read, Int -> GetECSServiceRecommendationProjectedMetricsResponse -> ShowS
[GetECSServiceRecommendationProjectedMetricsResponse] -> ShowS
GetECSServiceRecommendationProjectedMetricsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetECSServiceRecommendationProjectedMetricsResponse] -> ShowS
$cshowList :: [GetECSServiceRecommendationProjectedMetricsResponse] -> ShowS
show :: GetECSServiceRecommendationProjectedMetricsResponse -> String
$cshow :: GetECSServiceRecommendationProjectedMetricsResponse -> String
showsPrec :: Int -> GetECSServiceRecommendationProjectedMetricsResponse -> ShowS
$cshowsPrec :: Int -> GetECSServiceRecommendationProjectedMetricsResponse -> ShowS
Prelude.Show, forall x.
Rep GetECSServiceRecommendationProjectedMetricsResponse x
-> GetECSServiceRecommendationProjectedMetricsResponse
forall x.
GetECSServiceRecommendationProjectedMetricsResponse
-> Rep GetECSServiceRecommendationProjectedMetricsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetECSServiceRecommendationProjectedMetricsResponse x
-> GetECSServiceRecommendationProjectedMetricsResponse
$cfrom :: forall x.
GetECSServiceRecommendationProjectedMetricsResponse
-> Rep GetECSServiceRecommendationProjectedMetricsResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetECSServiceRecommendationProjectedMetricsResponse' 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:
--
-- 'recommendedOptionProjectedMetrics', 'getECSServiceRecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics' - An array of objects that describes the projected metrics.
--
-- 'httpStatus', 'getECSServiceRecommendationProjectedMetricsResponse_httpStatus' - The response's http status code.
newGetECSServiceRecommendationProjectedMetricsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetECSServiceRecommendationProjectedMetricsResponse
newGetECSServiceRecommendationProjectedMetricsResponse :: Int -> GetECSServiceRecommendationProjectedMetricsResponse
newGetECSServiceRecommendationProjectedMetricsResponse
  Int
pHttpStatus_ =
    GetECSServiceRecommendationProjectedMetricsResponse'
      { $sel:recommendedOptionProjectedMetrics:GetECSServiceRecommendationProjectedMetricsResponse' :: Maybe [ECSServiceRecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:GetECSServiceRecommendationProjectedMetricsResponse' :: Int
httpStatus =
          Int
pHttpStatus_
      }

-- | An array of objects that describes the projected metrics.
getECSServiceRecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics :: Lens.Lens' GetECSServiceRecommendationProjectedMetricsResponse (Prelude.Maybe [ECSServiceRecommendedOptionProjectedMetric])
getECSServiceRecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics :: Lens'
  GetECSServiceRecommendationProjectedMetricsResponse
  (Maybe [ECSServiceRecommendedOptionProjectedMetric])
getECSServiceRecommendationProjectedMetricsResponse_recommendedOptionProjectedMetrics = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetECSServiceRecommendationProjectedMetricsResponse' {Maybe [ECSServiceRecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics :: Maybe [ECSServiceRecommendedOptionProjectedMetric]
$sel:recommendedOptionProjectedMetrics:GetECSServiceRecommendationProjectedMetricsResponse' :: GetECSServiceRecommendationProjectedMetricsResponse
-> Maybe [ECSServiceRecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics} -> Maybe [ECSServiceRecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics) (\s :: GetECSServiceRecommendationProjectedMetricsResponse
s@GetECSServiceRecommendationProjectedMetricsResponse' {} Maybe [ECSServiceRecommendedOptionProjectedMetric]
a -> GetECSServiceRecommendationProjectedMetricsResponse
s {$sel:recommendedOptionProjectedMetrics:GetECSServiceRecommendationProjectedMetricsResponse' :: Maybe [ECSServiceRecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics = Maybe [ECSServiceRecommendedOptionProjectedMetric]
a} :: GetECSServiceRecommendationProjectedMetricsResponse) 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 response's http status code.
getECSServiceRecommendationProjectedMetricsResponse_httpStatus :: Lens.Lens' GetECSServiceRecommendationProjectedMetricsResponse Prelude.Int
getECSServiceRecommendationProjectedMetricsResponse_httpStatus :: Lens' GetECSServiceRecommendationProjectedMetricsResponse Int
getECSServiceRecommendationProjectedMetricsResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetECSServiceRecommendationProjectedMetricsResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetECSServiceRecommendationProjectedMetricsResponse' :: GetECSServiceRecommendationProjectedMetricsResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetECSServiceRecommendationProjectedMetricsResponse
s@GetECSServiceRecommendationProjectedMetricsResponse' {} Int
a -> GetECSServiceRecommendationProjectedMetricsResponse
s {$sel:httpStatus:GetECSServiceRecommendationProjectedMetricsResponse' :: Int
httpStatus = Int
a} :: GetECSServiceRecommendationProjectedMetricsResponse)

instance
  Prelude.NFData
    GetECSServiceRecommendationProjectedMetricsResponse
  where
  rnf :: GetECSServiceRecommendationProjectedMetricsResponse -> ()
rnf
    GetECSServiceRecommendationProjectedMetricsResponse' {Int
Maybe [ECSServiceRecommendedOptionProjectedMetric]
httpStatus :: Int
recommendedOptionProjectedMetrics :: Maybe [ECSServiceRecommendedOptionProjectedMetric]
$sel:httpStatus:GetECSServiceRecommendationProjectedMetricsResponse' :: GetECSServiceRecommendationProjectedMetricsResponse -> Int
$sel:recommendedOptionProjectedMetrics:GetECSServiceRecommendationProjectedMetricsResponse' :: GetECSServiceRecommendationProjectedMetricsResponse
-> Maybe [ECSServiceRecommendedOptionProjectedMetric]
..} =
      forall a. NFData a => a -> ()
Prelude.rnf Maybe [ECSServiceRecommendedOptionProjectedMetric]
recommendedOptionProjectedMetrics
        seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus