{-# 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.Pi.GetResourceMetadata
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieve the metadata for different features. For example, the metadata
-- might indicate that a feature is turned on or off on a specific DB
-- instance.
module Amazonka.Pi.GetResourceMetadata
  ( -- * Creating a Request
    GetResourceMetadata (..),
    newGetResourceMetadata,

    -- * Request Lenses
    getResourceMetadata_serviceType,
    getResourceMetadata_identifier,

    -- * Destructuring the Response
    GetResourceMetadataResponse (..),
    newGetResourceMetadataResponse,

    -- * Response Lenses
    getResourceMetadataResponse_features,
    getResourceMetadataResponse_identifier,
    getResourceMetadataResponse_httpStatus,
  )
where

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

-- | /See:/ 'newGetResourceMetadata' smart constructor.
data GetResourceMetadata = GetResourceMetadata'
  { -- | The Amazon Web Services service for which Performance Insights returns
    -- metrics.
    GetResourceMetadata -> ServiceType
serviceType :: ServiceType,
    -- | An immutable identifier for a data source that is unique for an Amazon
    -- Web Services Region. Performance Insights gathers metrics from this data
    -- source. To use a DB instance as a data source, specify its
    -- @DbiResourceId@ value. For example, specify
    -- @db-ABCDEFGHIJKLMNOPQRSTU1VW2X@.
    GetResourceMetadata -> Text
identifier :: Prelude.Text
  }
  deriving (GetResourceMetadata -> GetResourceMetadata -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetResourceMetadata -> GetResourceMetadata -> Bool
$c/= :: GetResourceMetadata -> GetResourceMetadata -> Bool
== :: GetResourceMetadata -> GetResourceMetadata -> Bool
$c== :: GetResourceMetadata -> GetResourceMetadata -> Bool
Prelude.Eq, ReadPrec [GetResourceMetadata]
ReadPrec GetResourceMetadata
Int -> ReadS GetResourceMetadata
ReadS [GetResourceMetadata]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetResourceMetadata]
$creadListPrec :: ReadPrec [GetResourceMetadata]
readPrec :: ReadPrec GetResourceMetadata
$creadPrec :: ReadPrec GetResourceMetadata
readList :: ReadS [GetResourceMetadata]
$creadList :: ReadS [GetResourceMetadata]
readsPrec :: Int -> ReadS GetResourceMetadata
$creadsPrec :: Int -> ReadS GetResourceMetadata
Prelude.Read, Int -> GetResourceMetadata -> ShowS
[GetResourceMetadata] -> ShowS
GetResourceMetadata -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetResourceMetadata] -> ShowS
$cshowList :: [GetResourceMetadata] -> ShowS
show :: GetResourceMetadata -> String
$cshow :: GetResourceMetadata -> String
showsPrec :: Int -> GetResourceMetadata -> ShowS
$cshowsPrec :: Int -> GetResourceMetadata -> ShowS
Prelude.Show, forall x. Rep GetResourceMetadata x -> GetResourceMetadata
forall x. GetResourceMetadata -> Rep GetResourceMetadata x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetResourceMetadata x -> GetResourceMetadata
$cfrom :: forall x. GetResourceMetadata -> Rep GetResourceMetadata x
Prelude.Generic)

-- |
-- Create a value of 'GetResourceMetadata' 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:
--
-- 'serviceType', 'getResourceMetadata_serviceType' - The Amazon Web Services service for which Performance Insights returns
-- metrics.
--
-- 'identifier', 'getResourceMetadata_identifier' - An immutable identifier for a data source that is unique for an Amazon
-- Web Services Region. Performance Insights gathers metrics from this data
-- source. To use a DB instance as a data source, specify its
-- @DbiResourceId@ value. For example, specify
-- @db-ABCDEFGHIJKLMNOPQRSTU1VW2X@.
newGetResourceMetadata ::
  -- | 'serviceType'
  ServiceType ->
  -- | 'identifier'
  Prelude.Text ->
  GetResourceMetadata
newGetResourceMetadata :: ServiceType -> Text -> GetResourceMetadata
newGetResourceMetadata ServiceType
pServiceType_ Text
pIdentifier_ =
  GetResourceMetadata'
    { $sel:serviceType:GetResourceMetadata' :: ServiceType
serviceType = ServiceType
pServiceType_,
      $sel:identifier:GetResourceMetadata' :: Text
identifier = Text
pIdentifier_
    }

-- | The Amazon Web Services service for which Performance Insights returns
-- metrics.
getResourceMetadata_serviceType :: Lens.Lens' GetResourceMetadata ServiceType
getResourceMetadata_serviceType :: Lens' GetResourceMetadata ServiceType
getResourceMetadata_serviceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceMetadata' {ServiceType
serviceType :: ServiceType
$sel:serviceType:GetResourceMetadata' :: GetResourceMetadata -> ServiceType
serviceType} -> ServiceType
serviceType) (\s :: GetResourceMetadata
s@GetResourceMetadata' {} ServiceType
a -> GetResourceMetadata
s {$sel:serviceType:GetResourceMetadata' :: ServiceType
serviceType = ServiceType
a} :: GetResourceMetadata)

-- | An immutable identifier for a data source that is unique for an Amazon
-- Web Services Region. Performance Insights gathers metrics from this data
-- source. To use a DB instance as a data source, specify its
-- @DbiResourceId@ value. For example, specify
-- @db-ABCDEFGHIJKLMNOPQRSTU1VW2X@.
getResourceMetadata_identifier :: Lens.Lens' GetResourceMetadata Prelude.Text
getResourceMetadata_identifier :: Lens' GetResourceMetadata Text
getResourceMetadata_identifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceMetadata' {Text
identifier :: Text
$sel:identifier:GetResourceMetadata' :: GetResourceMetadata -> Text
identifier} -> Text
identifier) (\s :: GetResourceMetadata
s@GetResourceMetadata' {} Text
a -> GetResourceMetadata
s {$sel:identifier:GetResourceMetadata' :: Text
identifier = Text
a} :: GetResourceMetadata)

instance Core.AWSRequest GetResourceMetadata where
  type
    AWSResponse GetResourceMetadata =
      GetResourceMetadataResponse
  request :: (Service -> Service)
-> GetResourceMetadata -> Request GetResourceMetadata
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 GetResourceMetadata
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse GetResourceMetadata)))
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 (HashMap Text FeatureMetadata)
-> Maybe Text -> Int -> GetResourceMetadataResponse
GetResourceMetadataResponse'
            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
"Features" 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
"Identifier")
            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 GetResourceMetadata where
  hashWithSalt :: Int -> GetResourceMetadata -> Int
hashWithSalt Int
_salt GetResourceMetadata' {Text
ServiceType
identifier :: Text
serviceType :: ServiceType
$sel:identifier:GetResourceMetadata' :: GetResourceMetadata -> Text
$sel:serviceType:GetResourceMetadata' :: GetResourceMetadata -> ServiceType
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ServiceType
serviceType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
identifier

instance Prelude.NFData GetResourceMetadata where
  rnf :: GetResourceMetadata -> ()
rnf GetResourceMetadata' {Text
ServiceType
identifier :: Text
serviceType :: ServiceType
$sel:identifier:GetResourceMetadata' :: GetResourceMetadata -> Text
$sel:serviceType:GetResourceMetadata' :: GetResourceMetadata -> ServiceType
..} =
    forall a. NFData a => a -> ()
Prelude.rnf ServiceType
serviceType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
identifier

instance Data.ToHeaders GetResourceMetadata where
  toHeaders :: GetResourceMetadata -> 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
"PerformanceInsightsv20180227.GetResourceMetadata" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON GetResourceMetadata where
  toJSON :: GetResourceMetadata -> Value
toJSON GetResourceMetadata' {Text
ServiceType
identifier :: Text
serviceType :: ServiceType
$sel:identifier:GetResourceMetadata' :: GetResourceMetadata -> Text
$sel:serviceType:GetResourceMetadata' :: GetResourceMetadata -> ServiceType
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"ServiceType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ServiceType
serviceType),
            forall a. a -> Maybe a
Prelude.Just (Key
"Identifier" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
identifier)
          ]
      )

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

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

-- | /See:/ 'newGetResourceMetadataResponse' smart constructor.
data GetResourceMetadataResponse = GetResourceMetadataResponse'
  { -- | The metadata for different features. For example, the metadata might
    -- indicate that a feature is turned on or off on a specific DB instance.
    GetResourceMetadataResponse -> Maybe (HashMap Text FeatureMetadata)
features :: Prelude.Maybe (Prelude.HashMap Prelude.Text FeatureMetadata),
    -- | An immutable identifier for a data source that is unique for an Amazon
    -- Web Services Region. Performance Insights gathers metrics from this data
    -- source. To use a DB instance as a data source, specify its
    -- @DbiResourceId@ value. For example, specify
    -- @db-ABCDEFGHIJKLMNOPQRSTU1VW2X@.
    GetResourceMetadataResponse -> Maybe Text
identifier :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetResourceMetadataResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetResourceMetadataResponse -> GetResourceMetadataResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetResourceMetadataResponse -> GetResourceMetadataResponse -> Bool
$c/= :: GetResourceMetadataResponse -> GetResourceMetadataResponse -> Bool
== :: GetResourceMetadataResponse -> GetResourceMetadataResponse -> Bool
$c== :: GetResourceMetadataResponse -> GetResourceMetadataResponse -> Bool
Prelude.Eq, ReadPrec [GetResourceMetadataResponse]
ReadPrec GetResourceMetadataResponse
Int -> ReadS GetResourceMetadataResponse
ReadS [GetResourceMetadataResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetResourceMetadataResponse]
$creadListPrec :: ReadPrec [GetResourceMetadataResponse]
readPrec :: ReadPrec GetResourceMetadataResponse
$creadPrec :: ReadPrec GetResourceMetadataResponse
readList :: ReadS [GetResourceMetadataResponse]
$creadList :: ReadS [GetResourceMetadataResponse]
readsPrec :: Int -> ReadS GetResourceMetadataResponse
$creadsPrec :: Int -> ReadS GetResourceMetadataResponse
Prelude.Read, Int -> GetResourceMetadataResponse -> ShowS
[GetResourceMetadataResponse] -> ShowS
GetResourceMetadataResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetResourceMetadataResponse] -> ShowS
$cshowList :: [GetResourceMetadataResponse] -> ShowS
show :: GetResourceMetadataResponse -> String
$cshow :: GetResourceMetadataResponse -> String
showsPrec :: Int -> GetResourceMetadataResponse -> ShowS
$cshowsPrec :: Int -> GetResourceMetadataResponse -> ShowS
Prelude.Show, forall x.
Rep GetResourceMetadataResponse x -> GetResourceMetadataResponse
forall x.
GetResourceMetadataResponse -> Rep GetResourceMetadataResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetResourceMetadataResponse x -> GetResourceMetadataResponse
$cfrom :: forall x.
GetResourceMetadataResponse -> Rep GetResourceMetadataResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetResourceMetadataResponse' 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:
--
-- 'features', 'getResourceMetadataResponse_features' - The metadata for different features. For example, the metadata might
-- indicate that a feature is turned on or off on a specific DB instance.
--
-- 'identifier', 'getResourceMetadataResponse_identifier' - An immutable identifier for a data source that is unique for an Amazon
-- Web Services Region. Performance Insights gathers metrics from this data
-- source. To use a DB instance as a data source, specify its
-- @DbiResourceId@ value. For example, specify
-- @db-ABCDEFGHIJKLMNOPQRSTU1VW2X@.
--
-- 'httpStatus', 'getResourceMetadataResponse_httpStatus' - The response's http status code.
newGetResourceMetadataResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetResourceMetadataResponse
newGetResourceMetadataResponse :: Int -> GetResourceMetadataResponse
newGetResourceMetadataResponse Int
pHttpStatus_ =
  GetResourceMetadataResponse'
    { $sel:features:GetResourceMetadataResponse' :: Maybe (HashMap Text FeatureMetadata)
features =
        forall a. Maybe a
Prelude.Nothing,
      $sel:identifier:GetResourceMetadataResponse' :: Maybe Text
identifier = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetResourceMetadataResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The metadata for different features. For example, the metadata might
-- indicate that a feature is turned on or off on a specific DB instance.
getResourceMetadataResponse_features :: Lens.Lens' GetResourceMetadataResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text FeatureMetadata))
getResourceMetadataResponse_features :: Lens'
  GetResourceMetadataResponse (Maybe (HashMap Text FeatureMetadata))
getResourceMetadataResponse_features = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceMetadataResponse' {Maybe (HashMap Text FeatureMetadata)
features :: Maybe (HashMap Text FeatureMetadata)
$sel:features:GetResourceMetadataResponse' :: GetResourceMetadataResponse -> Maybe (HashMap Text FeatureMetadata)
features} -> Maybe (HashMap Text FeatureMetadata)
features) (\s :: GetResourceMetadataResponse
s@GetResourceMetadataResponse' {} Maybe (HashMap Text FeatureMetadata)
a -> GetResourceMetadataResponse
s {$sel:features:GetResourceMetadataResponse' :: Maybe (HashMap Text FeatureMetadata)
features = Maybe (HashMap Text FeatureMetadata)
a} :: GetResourceMetadataResponse) 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

-- | An immutable identifier for a data source that is unique for an Amazon
-- Web Services Region. Performance Insights gathers metrics from this data
-- source. To use a DB instance as a data source, specify its
-- @DbiResourceId@ value. For example, specify
-- @db-ABCDEFGHIJKLMNOPQRSTU1VW2X@.
getResourceMetadataResponse_identifier :: Lens.Lens' GetResourceMetadataResponse (Prelude.Maybe Prelude.Text)
getResourceMetadataResponse_identifier :: Lens' GetResourceMetadataResponse (Maybe Text)
getResourceMetadataResponse_identifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetResourceMetadataResponse' {Maybe Text
identifier :: Maybe Text
$sel:identifier:GetResourceMetadataResponse' :: GetResourceMetadataResponse -> Maybe Text
identifier} -> Maybe Text
identifier) (\s :: GetResourceMetadataResponse
s@GetResourceMetadataResponse' {} Maybe Text
a -> GetResourceMetadataResponse
s {$sel:identifier:GetResourceMetadataResponse' :: Maybe Text
identifier = Maybe Text
a} :: GetResourceMetadataResponse)

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

instance Prelude.NFData GetResourceMetadataResponse where
  rnf :: GetResourceMetadataResponse -> ()
rnf GetResourceMetadataResponse' {Int
Maybe Text
Maybe (HashMap Text FeatureMetadata)
httpStatus :: Int
identifier :: Maybe Text
features :: Maybe (HashMap Text FeatureMetadata)
$sel:httpStatus:GetResourceMetadataResponse' :: GetResourceMetadataResponse -> Int
$sel:identifier:GetResourceMetadataResponse' :: GetResourceMetadataResponse -> Maybe Text
$sel:features:GetResourceMetadataResponse' :: GetResourceMetadataResponse -> Maybe (HashMap Text FeatureMetadata)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text FeatureMetadata)
features
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
identifier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus