{-# 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.RDS.DescribeValidDBInstanceModifications
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- You can call @DescribeValidDBInstanceModifications@ to learn what
-- modifications you can make to your DB instance. You can use this
-- information when you call @ModifyDBInstance@.
--
-- This command doesn\'t apply to RDS Custom.
module Amazonka.RDS.DescribeValidDBInstanceModifications
  ( -- * Creating a Request
    DescribeValidDBInstanceModifications (..),
    newDescribeValidDBInstanceModifications,

    -- * Request Lenses
    describeValidDBInstanceModifications_dbInstanceIdentifier,

    -- * Destructuring the Response
    DescribeValidDBInstanceModificationsResponse (..),
    newDescribeValidDBInstanceModificationsResponse,

    -- * Response Lenses
    describeValidDBInstanceModificationsResponse_validDBInstanceModificationsMessage,
    describeValidDBInstanceModificationsResponse_httpStatus,
  )
where

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 Amazonka.RDS.Types
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- |
--
-- /See:/ 'newDescribeValidDBInstanceModifications' smart constructor.
data DescribeValidDBInstanceModifications = DescribeValidDBInstanceModifications'
  { -- | The customer identifier or the ARN of your DB instance.
    DescribeValidDBInstanceModifications -> Text
dbInstanceIdentifier :: Prelude.Text
  }
  deriving (DescribeValidDBInstanceModifications
-> DescribeValidDBInstanceModifications -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeValidDBInstanceModifications
-> DescribeValidDBInstanceModifications -> Bool
$c/= :: DescribeValidDBInstanceModifications
-> DescribeValidDBInstanceModifications -> Bool
== :: DescribeValidDBInstanceModifications
-> DescribeValidDBInstanceModifications -> Bool
$c== :: DescribeValidDBInstanceModifications
-> DescribeValidDBInstanceModifications -> Bool
Prelude.Eq, ReadPrec [DescribeValidDBInstanceModifications]
ReadPrec DescribeValidDBInstanceModifications
Int -> ReadS DescribeValidDBInstanceModifications
ReadS [DescribeValidDBInstanceModifications]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeValidDBInstanceModifications]
$creadListPrec :: ReadPrec [DescribeValidDBInstanceModifications]
readPrec :: ReadPrec DescribeValidDBInstanceModifications
$creadPrec :: ReadPrec DescribeValidDBInstanceModifications
readList :: ReadS [DescribeValidDBInstanceModifications]
$creadList :: ReadS [DescribeValidDBInstanceModifications]
readsPrec :: Int -> ReadS DescribeValidDBInstanceModifications
$creadsPrec :: Int -> ReadS DescribeValidDBInstanceModifications
Prelude.Read, Int -> DescribeValidDBInstanceModifications -> ShowS
[DescribeValidDBInstanceModifications] -> ShowS
DescribeValidDBInstanceModifications -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeValidDBInstanceModifications] -> ShowS
$cshowList :: [DescribeValidDBInstanceModifications] -> ShowS
show :: DescribeValidDBInstanceModifications -> String
$cshow :: DescribeValidDBInstanceModifications -> String
showsPrec :: Int -> DescribeValidDBInstanceModifications -> ShowS
$cshowsPrec :: Int -> DescribeValidDBInstanceModifications -> ShowS
Prelude.Show, forall x.
Rep DescribeValidDBInstanceModifications x
-> DescribeValidDBInstanceModifications
forall x.
DescribeValidDBInstanceModifications
-> Rep DescribeValidDBInstanceModifications x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeValidDBInstanceModifications x
-> DescribeValidDBInstanceModifications
$cfrom :: forall x.
DescribeValidDBInstanceModifications
-> Rep DescribeValidDBInstanceModifications x
Prelude.Generic)

-- |
-- Create a value of 'DescribeValidDBInstanceModifications' 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:
--
-- 'dbInstanceIdentifier', 'describeValidDBInstanceModifications_dbInstanceIdentifier' - The customer identifier or the ARN of your DB instance.
newDescribeValidDBInstanceModifications ::
  -- | 'dbInstanceIdentifier'
  Prelude.Text ->
  DescribeValidDBInstanceModifications
newDescribeValidDBInstanceModifications :: Text -> DescribeValidDBInstanceModifications
newDescribeValidDBInstanceModifications
  Text
pDBInstanceIdentifier_ =
    DescribeValidDBInstanceModifications'
      { $sel:dbInstanceIdentifier:DescribeValidDBInstanceModifications' :: Text
dbInstanceIdentifier =
          Text
pDBInstanceIdentifier_
      }

-- | The customer identifier or the ARN of your DB instance.
describeValidDBInstanceModifications_dbInstanceIdentifier :: Lens.Lens' DescribeValidDBInstanceModifications Prelude.Text
describeValidDBInstanceModifications_dbInstanceIdentifier :: Lens' DescribeValidDBInstanceModifications Text
describeValidDBInstanceModifications_dbInstanceIdentifier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeValidDBInstanceModifications' {Text
dbInstanceIdentifier :: Text
$sel:dbInstanceIdentifier:DescribeValidDBInstanceModifications' :: DescribeValidDBInstanceModifications -> Text
dbInstanceIdentifier} -> Text
dbInstanceIdentifier) (\s :: DescribeValidDBInstanceModifications
s@DescribeValidDBInstanceModifications' {} Text
a -> DescribeValidDBInstanceModifications
s {$sel:dbInstanceIdentifier:DescribeValidDBInstanceModifications' :: Text
dbInstanceIdentifier = Text
a} :: DescribeValidDBInstanceModifications)

instance
  Core.AWSRequest
    DescribeValidDBInstanceModifications
  where
  type
    AWSResponse DescribeValidDBInstanceModifications =
      DescribeValidDBInstanceModificationsResponse
  request :: (Service -> Service)
-> DescribeValidDBInstanceModifications
-> Request DescribeValidDBInstanceModifications
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeValidDBInstanceModifications
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse DescribeValidDBInstanceModifications)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXMLWrapper
      Text
"DescribeValidDBInstanceModificationsResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe ValidDBInstanceModificationsMessage
-> Int -> DescribeValidDBInstanceModificationsResponse
DescribeValidDBInstanceModificationsResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"ValidDBInstanceModificationsMessage")
            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
    DescribeValidDBInstanceModifications
  where
  hashWithSalt :: Int -> DescribeValidDBInstanceModifications -> Int
hashWithSalt
    Int
_salt
    DescribeValidDBInstanceModifications' {Text
dbInstanceIdentifier :: Text
$sel:dbInstanceIdentifier:DescribeValidDBInstanceModifications' :: DescribeValidDBInstanceModifications -> Text
..} =
      Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
dbInstanceIdentifier

instance
  Prelude.NFData
    DescribeValidDBInstanceModifications
  where
  rnf :: DescribeValidDBInstanceModifications -> ()
rnf DescribeValidDBInstanceModifications' {Text
dbInstanceIdentifier :: Text
$sel:dbInstanceIdentifier:DescribeValidDBInstanceModifications' :: DescribeValidDBInstanceModifications -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
dbInstanceIdentifier

instance
  Data.ToHeaders
    DescribeValidDBInstanceModifications
  where
  toHeaders :: DescribeValidDBInstanceModifications -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

instance
  Data.ToQuery
    DescribeValidDBInstanceModifications
  where
  toQuery :: DescribeValidDBInstanceModifications -> QueryString
toQuery DescribeValidDBInstanceModifications' {Text
dbInstanceIdentifier :: Text
$sel:dbInstanceIdentifier:DescribeValidDBInstanceModifications' :: DescribeValidDBInstanceModifications -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"DescribeValidDBInstanceModifications" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2014-10-31" :: Prelude.ByteString),
        ByteString
"DBInstanceIdentifier" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
dbInstanceIdentifier
      ]

-- | /See:/ 'newDescribeValidDBInstanceModificationsResponse' smart constructor.
data DescribeValidDBInstanceModificationsResponse = DescribeValidDBInstanceModificationsResponse'
  { DescribeValidDBInstanceModificationsResponse
-> Maybe ValidDBInstanceModificationsMessage
validDBInstanceModificationsMessage :: Prelude.Maybe ValidDBInstanceModificationsMessage,
    -- | The response's http status code.
    DescribeValidDBInstanceModificationsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeValidDBInstanceModificationsResponse
-> DescribeValidDBInstanceModificationsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeValidDBInstanceModificationsResponse
-> DescribeValidDBInstanceModificationsResponse -> Bool
$c/= :: DescribeValidDBInstanceModificationsResponse
-> DescribeValidDBInstanceModificationsResponse -> Bool
== :: DescribeValidDBInstanceModificationsResponse
-> DescribeValidDBInstanceModificationsResponse -> Bool
$c== :: DescribeValidDBInstanceModificationsResponse
-> DescribeValidDBInstanceModificationsResponse -> Bool
Prelude.Eq, ReadPrec [DescribeValidDBInstanceModificationsResponse]
ReadPrec DescribeValidDBInstanceModificationsResponse
Int -> ReadS DescribeValidDBInstanceModificationsResponse
ReadS [DescribeValidDBInstanceModificationsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeValidDBInstanceModificationsResponse]
$creadListPrec :: ReadPrec [DescribeValidDBInstanceModificationsResponse]
readPrec :: ReadPrec DescribeValidDBInstanceModificationsResponse
$creadPrec :: ReadPrec DescribeValidDBInstanceModificationsResponse
readList :: ReadS [DescribeValidDBInstanceModificationsResponse]
$creadList :: ReadS [DescribeValidDBInstanceModificationsResponse]
readsPrec :: Int -> ReadS DescribeValidDBInstanceModificationsResponse
$creadsPrec :: Int -> ReadS DescribeValidDBInstanceModificationsResponse
Prelude.Read, Int -> DescribeValidDBInstanceModificationsResponse -> ShowS
[DescribeValidDBInstanceModificationsResponse] -> ShowS
DescribeValidDBInstanceModificationsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeValidDBInstanceModificationsResponse] -> ShowS
$cshowList :: [DescribeValidDBInstanceModificationsResponse] -> ShowS
show :: DescribeValidDBInstanceModificationsResponse -> String
$cshow :: DescribeValidDBInstanceModificationsResponse -> String
showsPrec :: Int -> DescribeValidDBInstanceModificationsResponse -> ShowS
$cshowsPrec :: Int -> DescribeValidDBInstanceModificationsResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeValidDBInstanceModificationsResponse x
-> DescribeValidDBInstanceModificationsResponse
forall x.
DescribeValidDBInstanceModificationsResponse
-> Rep DescribeValidDBInstanceModificationsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeValidDBInstanceModificationsResponse x
-> DescribeValidDBInstanceModificationsResponse
$cfrom :: forall x.
DescribeValidDBInstanceModificationsResponse
-> Rep DescribeValidDBInstanceModificationsResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeValidDBInstanceModificationsResponse' 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:
--
-- 'validDBInstanceModificationsMessage', 'describeValidDBInstanceModificationsResponse_validDBInstanceModificationsMessage' - Undocumented member.
--
-- 'httpStatus', 'describeValidDBInstanceModificationsResponse_httpStatus' - The response's http status code.
newDescribeValidDBInstanceModificationsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeValidDBInstanceModificationsResponse
newDescribeValidDBInstanceModificationsResponse :: Int -> DescribeValidDBInstanceModificationsResponse
newDescribeValidDBInstanceModificationsResponse
  Int
pHttpStatus_ =
    DescribeValidDBInstanceModificationsResponse'
      { $sel:validDBInstanceModificationsMessage:DescribeValidDBInstanceModificationsResponse' :: Maybe ValidDBInstanceModificationsMessage
validDBInstanceModificationsMessage =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:DescribeValidDBInstanceModificationsResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | Undocumented member.
describeValidDBInstanceModificationsResponse_validDBInstanceModificationsMessage :: Lens.Lens' DescribeValidDBInstanceModificationsResponse (Prelude.Maybe ValidDBInstanceModificationsMessage)
describeValidDBInstanceModificationsResponse_validDBInstanceModificationsMessage :: Lens'
  DescribeValidDBInstanceModificationsResponse
  (Maybe ValidDBInstanceModificationsMessage)
describeValidDBInstanceModificationsResponse_validDBInstanceModificationsMessage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeValidDBInstanceModificationsResponse' {Maybe ValidDBInstanceModificationsMessage
validDBInstanceModificationsMessage :: Maybe ValidDBInstanceModificationsMessage
$sel:validDBInstanceModificationsMessage:DescribeValidDBInstanceModificationsResponse' :: DescribeValidDBInstanceModificationsResponse
-> Maybe ValidDBInstanceModificationsMessage
validDBInstanceModificationsMessage} -> Maybe ValidDBInstanceModificationsMessage
validDBInstanceModificationsMessage) (\s :: DescribeValidDBInstanceModificationsResponse
s@DescribeValidDBInstanceModificationsResponse' {} Maybe ValidDBInstanceModificationsMessage
a -> DescribeValidDBInstanceModificationsResponse
s {$sel:validDBInstanceModificationsMessage:DescribeValidDBInstanceModificationsResponse' :: Maybe ValidDBInstanceModificationsMessage
validDBInstanceModificationsMessage = Maybe ValidDBInstanceModificationsMessage
a} :: DescribeValidDBInstanceModificationsResponse)

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

instance
  Prelude.NFData
    DescribeValidDBInstanceModificationsResponse
  where
  rnf :: DescribeValidDBInstanceModificationsResponse -> ()
rnf DescribeValidDBInstanceModificationsResponse' {Int
Maybe ValidDBInstanceModificationsMessage
httpStatus :: Int
validDBInstanceModificationsMessage :: Maybe ValidDBInstanceModificationsMessage
$sel:httpStatus:DescribeValidDBInstanceModificationsResponse' :: DescribeValidDBInstanceModificationsResponse -> Int
$sel:validDBInstanceModificationsMessage:DescribeValidDBInstanceModificationsResponse' :: DescribeValidDBInstanceModificationsResponse
-> Maybe ValidDBInstanceModificationsMessage
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ValidDBInstanceModificationsMessage
validDBInstanceModificationsMessage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus