{-# 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.Redshift.DescribeOrderableClusterOptions
-- 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 a list of orderable cluster options. Before you create a new
-- cluster you can use this operation to find what options are available,
-- such as the EC2 Availability Zones (AZ) in the specific Amazon Web
-- Services Region that you can specify, and the node types you can
-- request. The node types differ by available storage, memory, CPU and
-- price. With the cost involved you might want to obtain a list of cluster
-- options in the specific region and specify values when creating a
-- cluster. For more information about managing clusters, go to
-- <https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html Amazon Redshift Clusters>
-- in the /Amazon Redshift Cluster Management Guide/.
--
-- This operation returns paginated results.
module Amazonka.Redshift.DescribeOrderableClusterOptions
  ( -- * Creating a Request
    DescribeOrderableClusterOptions (..),
    newDescribeOrderableClusterOptions,

    -- * Request Lenses
    describeOrderableClusterOptions_clusterVersion,
    describeOrderableClusterOptions_marker,
    describeOrderableClusterOptions_maxRecords,
    describeOrderableClusterOptions_nodeType,

    -- * Destructuring the Response
    DescribeOrderableClusterOptionsResponse (..),
    newDescribeOrderableClusterOptionsResponse,

    -- * Response Lenses
    describeOrderableClusterOptionsResponse_marker,
    describeOrderableClusterOptionsResponse_orderableClusterOptions,
    describeOrderableClusterOptionsResponse_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.Redshift.Types
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- |
--
-- /See:/ 'newDescribeOrderableClusterOptions' smart constructor.
data DescribeOrderableClusterOptions = DescribeOrderableClusterOptions'
  { -- | The version filter value. Specify this parameter to show only the
    -- available offerings matching the specified version.
    --
    -- Default: All versions.
    --
    -- Constraints: Must be one of the version returned from
    -- DescribeClusterVersions.
    DescribeOrderableClusterOptions -> Maybe Text
clusterVersion :: Prelude.Maybe Prelude.Text,
    -- | An optional parameter that specifies the starting point to return a set
    -- of response records. When the results of a
    -- DescribeOrderableClusterOptions request exceed the value specified in
    -- @MaxRecords@, Amazon Web Services returns a value in the @Marker@ field
    -- of the response. You can retrieve the next set of response records by
    -- providing the returned marker value in the @Marker@ parameter and
    -- retrying the request.
    DescribeOrderableClusterOptions -> Maybe Text
marker :: Prelude.Maybe Prelude.Text,
    -- | The maximum number of response records to return in each call. If the
    -- number of remaining response records exceeds the specified @MaxRecords@
    -- value, a value is returned in a @marker@ field of the response. You can
    -- retrieve the next set of records by retrying the command with the
    -- returned marker value.
    --
    -- Default: @100@
    --
    -- Constraints: minimum 20, maximum 100.
    DescribeOrderableClusterOptions -> Maybe Int
maxRecords :: Prelude.Maybe Prelude.Int,
    -- | The node type filter value. Specify this parameter to show only the
    -- available offerings matching the specified node type.
    DescribeOrderableClusterOptions -> Maybe Text
nodeType :: Prelude.Maybe Prelude.Text
  }
  deriving (DescribeOrderableClusterOptions
-> DescribeOrderableClusterOptions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeOrderableClusterOptions
-> DescribeOrderableClusterOptions -> Bool
$c/= :: DescribeOrderableClusterOptions
-> DescribeOrderableClusterOptions -> Bool
== :: DescribeOrderableClusterOptions
-> DescribeOrderableClusterOptions -> Bool
$c== :: DescribeOrderableClusterOptions
-> DescribeOrderableClusterOptions -> Bool
Prelude.Eq, ReadPrec [DescribeOrderableClusterOptions]
ReadPrec DescribeOrderableClusterOptions
Int -> ReadS DescribeOrderableClusterOptions
ReadS [DescribeOrderableClusterOptions]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeOrderableClusterOptions]
$creadListPrec :: ReadPrec [DescribeOrderableClusterOptions]
readPrec :: ReadPrec DescribeOrderableClusterOptions
$creadPrec :: ReadPrec DescribeOrderableClusterOptions
readList :: ReadS [DescribeOrderableClusterOptions]
$creadList :: ReadS [DescribeOrderableClusterOptions]
readsPrec :: Int -> ReadS DescribeOrderableClusterOptions
$creadsPrec :: Int -> ReadS DescribeOrderableClusterOptions
Prelude.Read, Int -> DescribeOrderableClusterOptions -> ShowS
[DescribeOrderableClusterOptions] -> ShowS
DescribeOrderableClusterOptions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeOrderableClusterOptions] -> ShowS
$cshowList :: [DescribeOrderableClusterOptions] -> ShowS
show :: DescribeOrderableClusterOptions -> String
$cshow :: DescribeOrderableClusterOptions -> String
showsPrec :: Int -> DescribeOrderableClusterOptions -> ShowS
$cshowsPrec :: Int -> DescribeOrderableClusterOptions -> ShowS
Prelude.Show, forall x.
Rep DescribeOrderableClusterOptions x
-> DescribeOrderableClusterOptions
forall x.
DescribeOrderableClusterOptions
-> Rep DescribeOrderableClusterOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeOrderableClusterOptions x
-> DescribeOrderableClusterOptions
$cfrom :: forall x.
DescribeOrderableClusterOptions
-> Rep DescribeOrderableClusterOptions x
Prelude.Generic)

-- |
-- Create a value of 'DescribeOrderableClusterOptions' 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:
--
-- 'clusterVersion', 'describeOrderableClusterOptions_clusterVersion' - The version filter value. Specify this parameter to show only the
-- available offerings matching the specified version.
--
-- Default: All versions.
--
-- Constraints: Must be one of the version returned from
-- DescribeClusterVersions.
--
-- 'marker', 'describeOrderableClusterOptions_marker' - An optional parameter that specifies the starting point to return a set
-- of response records. When the results of a
-- DescribeOrderableClusterOptions request exceed the value specified in
-- @MaxRecords@, Amazon Web Services returns a value in the @Marker@ field
-- of the response. You can retrieve the next set of response records by
-- providing the returned marker value in the @Marker@ parameter and
-- retrying the request.
--
-- 'maxRecords', 'describeOrderableClusterOptions_maxRecords' - The maximum number of response records to return in each call. If the
-- number of remaining response records exceeds the specified @MaxRecords@
-- value, a value is returned in a @marker@ field of the response. You can
-- retrieve the next set of records by retrying the command with the
-- returned marker value.
--
-- Default: @100@
--
-- Constraints: minimum 20, maximum 100.
--
-- 'nodeType', 'describeOrderableClusterOptions_nodeType' - The node type filter value. Specify this parameter to show only the
-- available offerings matching the specified node type.
newDescribeOrderableClusterOptions ::
  DescribeOrderableClusterOptions
newDescribeOrderableClusterOptions :: DescribeOrderableClusterOptions
newDescribeOrderableClusterOptions =
  DescribeOrderableClusterOptions'
    { $sel:clusterVersion:DescribeOrderableClusterOptions' :: Maybe Text
clusterVersion =
        forall a. Maybe a
Prelude.Nothing,
      $sel:marker:DescribeOrderableClusterOptions' :: Maybe Text
marker = forall a. Maybe a
Prelude.Nothing,
      $sel:maxRecords:DescribeOrderableClusterOptions' :: Maybe Int
maxRecords = forall a. Maybe a
Prelude.Nothing,
      $sel:nodeType:DescribeOrderableClusterOptions' :: Maybe Text
nodeType = forall a. Maybe a
Prelude.Nothing
    }

-- | The version filter value. Specify this parameter to show only the
-- available offerings matching the specified version.
--
-- Default: All versions.
--
-- Constraints: Must be one of the version returned from
-- DescribeClusterVersions.
describeOrderableClusterOptions_clusterVersion :: Lens.Lens' DescribeOrderableClusterOptions (Prelude.Maybe Prelude.Text)
describeOrderableClusterOptions_clusterVersion :: Lens' DescribeOrderableClusterOptions (Maybe Text)
describeOrderableClusterOptions_clusterVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeOrderableClusterOptions' {Maybe Text
clusterVersion :: Maybe Text
$sel:clusterVersion:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
clusterVersion} -> Maybe Text
clusterVersion) (\s :: DescribeOrderableClusterOptions
s@DescribeOrderableClusterOptions' {} Maybe Text
a -> DescribeOrderableClusterOptions
s {$sel:clusterVersion:DescribeOrderableClusterOptions' :: Maybe Text
clusterVersion = Maybe Text
a} :: DescribeOrderableClusterOptions)

-- | An optional parameter that specifies the starting point to return a set
-- of response records. When the results of a
-- DescribeOrderableClusterOptions request exceed the value specified in
-- @MaxRecords@, Amazon Web Services returns a value in the @Marker@ field
-- of the response. You can retrieve the next set of response records by
-- providing the returned marker value in the @Marker@ parameter and
-- retrying the request.
describeOrderableClusterOptions_marker :: Lens.Lens' DescribeOrderableClusterOptions (Prelude.Maybe Prelude.Text)
describeOrderableClusterOptions_marker :: Lens' DescribeOrderableClusterOptions (Maybe Text)
describeOrderableClusterOptions_marker = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeOrderableClusterOptions' {Maybe Text
marker :: Maybe Text
$sel:marker:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
marker} -> Maybe Text
marker) (\s :: DescribeOrderableClusterOptions
s@DescribeOrderableClusterOptions' {} Maybe Text
a -> DescribeOrderableClusterOptions
s {$sel:marker:DescribeOrderableClusterOptions' :: Maybe Text
marker = Maybe Text
a} :: DescribeOrderableClusterOptions)

-- | The maximum number of response records to return in each call. If the
-- number of remaining response records exceeds the specified @MaxRecords@
-- value, a value is returned in a @marker@ field of the response. You can
-- retrieve the next set of records by retrying the command with the
-- returned marker value.
--
-- Default: @100@
--
-- Constraints: minimum 20, maximum 100.
describeOrderableClusterOptions_maxRecords :: Lens.Lens' DescribeOrderableClusterOptions (Prelude.Maybe Prelude.Int)
describeOrderableClusterOptions_maxRecords :: Lens' DescribeOrderableClusterOptions (Maybe Int)
describeOrderableClusterOptions_maxRecords = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeOrderableClusterOptions' {Maybe Int
maxRecords :: Maybe Int
$sel:maxRecords:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Int
maxRecords} -> Maybe Int
maxRecords) (\s :: DescribeOrderableClusterOptions
s@DescribeOrderableClusterOptions' {} Maybe Int
a -> DescribeOrderableClusterOptions
s {$sel:maxRecords:DescribeOrderableClusterOptions' :: Maybe Int
maxRecords = Maybe Int
a} :: DescribeOrderableClusterOptions)

-- | The node type filter value. Specify this parameter to show only the
-- available offerings matching the specified node type.
describeOrderableClusterOptions_nodeType :: Lens.Lens' DescribeOrderableClusterOptions (Prelude.Maybe Prelude.Text)
describeOrderableClusterOptions_nodeType :: Lens' DescribeOrderableClusterOptions (Maybe Text)
describeOrderableClusterOptions_nodeType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeOrderableClusterOptions' {Maybe Text
nodeType :: Maybe Text
$sel:nodeType:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
nodeType} -> Maybe Text
nodeType) (\s :: DescribeOrderableClusterOptions
s@DescribeOrderableClusterOptions' {} Maybe Text
a -> DescribeOrderableClusterOptions
s {$sel:nodeType:DescribeOrderableClusterOptions' :: Maybe Text
nodeType = Maybe Text
a} :: DescribeOrderableClusterOptions)

instance
  Core.AWSPager
    DescribeOrderableClusterOptions
  where
  page :: DescribeOrderableClusterOptions
-> AWSResponse DescribeOrderableClusterOptions
-> Maybe DescribeOrderableClusterOptions
page DescribeOrderableClusterOptions
rq AWSResponse DescribeOrderableClusterOptions
rs
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribeOrderableClusterOptions
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeOrderableClusterOptionsResponse (Maybe Text)
describeOrderableClusterOptionsResponse_marker
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribeOrderableClusterOptions
rs
            forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens'
  DescribeOrderableClusterOptionsResponse
  (Maybe [OrderableClusterOption])
describeOrderableClusterOptionsResponse_orderableClusterOptions
            forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
        forall a. Maybe a
Prelude.Nothing
    | Bool
Prelude.otherwise =
        forall a. a -> Maybe a
Prelude.Just
          forall a b. (a -> b) -> a -> b
Prelude.$ DescribeOrderableClusterOptions
rq
          forall a b. a -> (a -> b) -> b
Prelude.& Lens' DescribeOrderableClusterOptions (Maybe Text)
describeOrderableClusterOptions_marker
          forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse DescribeOrderableClusterOptions
rs
          forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? Lens' DescribeOrderableClusterOptionsResponse (Maybe Text)
describeOrderableClusterOptionsResponse_marker
          forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just

instance
  Core.AWSRequest
    DescribeOrderableClusterOptions
  where
  type
    AWSResponse DescribeOrderableClusterOptions =
      DescribeOrderableClusterOptionsResponse
  request :: (Service -> Service)
-> DescribeOrderableClusterOptions
-> Request DescribeOrderableClusterOptions
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 DescribeOrderableClusterOptions
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse DescribeOrderableClusterOptions)))
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
"DescribeOrderableClusterOptionsResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe Text
-> Maybe [OrderableClusterOption]
-> Int
-> DescribeOrderableClusterOptionsResponse
DescribeOrderableClusterOptionsResponse'
            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
"Marker")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                            forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"OrderableClusterOptions"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                            forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may
                              (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"OrderableClusterOption")
                        )
            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
    DescribeOrderableClusterOptions
  where
  hashWithSalt :: Int -> DescribeOrderableClusterOptions -> Int
hashWithSalt
    Int
_salt
    DescribeOrderableClusterOptions' {Maybe Int
Maybe Text
nodeType :: Maybe Text
maxRecords :: Maybe Int
marker :: Maybe Text
clusterVersion :: Maybe Text
$sel:nodeType:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
$sel:maxRecords:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Int
$sel:marker:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
$sel:clusterVersion:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clusterVersion
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
marker
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
maxRecords
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nodeType

instance
  Prelude.NFData
    DescribeOrderableClusterOptions
  where
  rnf :: DescribeOrderableClusterOptions -> ()
rnf DescribeOrderableClusterOptions' {Maybe Int
Maybe Text
nodeType :: Maybe Text
maxRecords :: Maybe Int
marker :: Maybe Text
clusterVersion :: Maybe Text
$sel:nodeType:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
$sel:maxRecords:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Int
$sel:marker:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
$sel:clusterVersion:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clusterVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
marker
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
maxRecords
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nodeType

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

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

instance Data.ToQuery DescribeOrderableClusterOptions where
  toQuery :: DescribeOrderableClusterOptions -> QueryString
toQuery DescribeOrderableClusterOptions' {Maybe Int
Maybe Text
nodeType :: Maybe Text
maxRecords :: Maybe Int
marker :: Maybe Text
clusterVersion :: Maybe Text
$sel:nodeType:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
$sel:maxRecords:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Int
$sel:marker:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
$sel:clusterVersion:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"DescribeOrderableClusterOptions" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2012-12-01" :: Prelude.ByteString),
        ByteString
"ClusterVersion" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
clusterVersion,
        ByteString
"Marker" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
marker,
        ByteString
"MaxRecords" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Int
maxRecords,
        ByteString
"NodeType" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
nodeType
      ]

-- | Contains the output from the DescribeOrderableClusterOptions action.
--
-- /See:/ 'newDescribeOrderableClusterOptionsResponse' smart constructor.
data DescribeOrderableClusterOptionsResponse = DescribeOrderableClusterOptionsResponse'
  { -- | A value that indicates the starting point for the next set of response
    -- records in a subsequent request. If a value is returned in a response,
    -- you can retrieve the next set of records by providing this returned
    -- marker value in the @Marker@ parameter and retrying the command. If the
    -- @Marker@ field is empty, all response records have been retrieved for
    -- the request.
    DescribeOrderableClusterOptionsResponse -> Maybe Text
marker :: Prelude.Maybe Prelude.Text,
    -- | An @OrderableClusterOption@ structure containing information about
    -- orderable options for the cluster.
    DescribeOrderableClusterOptionsResponse
-> Maybe [OrderableClusterOption]
orderableClusterOptions :: Prelude.Maybe [OrderableClusterOption],
    -- | The response's http status code.
    DescribeOrderableClusterOptionsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeOrderableClusterOptionsResponse
-> DescribeOrderableClusterOptionsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeOrderableClusterOptionsResponse
-> DescribeOrderableClusterOptionsResponse -> Bool
$c/= :: DescribeOrderableClusterOptionsResponse
-> DescribeOrderableClusterOptionsResponse -> Bool
== :: DescribeOrderableClusterOptionsResponse
-> DescribeOrderableClusterOptionsResponse -> Bool
$c== :: DescribeOrderableClusterOptionsResponse
-> DescribeOrderableClusterOptionsResponse -> Bool
Prelude.Eq, ReadPrec [DescribeOrderableClusterOptionsResponse]
ReadPrec DescribeOrderableClusterOptionsResponse
Int -> ReadS DescribeOrderableClusterOptionsResponse
ReadS [DescribeOrderableClusterOptionsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeOrderableClusterOptionsResponse]
$creadListPrec :: ReadPrec [DescribeOrderableClusterOptionsResponse]
readPrec :: ReadPrec DescribeOrderableClusterOptionsResponse
$creadPrec :: ReadPrec DescribeOrderableClusterOptionsResponse
readList :: ReadS [DescribeOrderableClusterOptionsResponse]
$creadList :: ReadS [DescribeOrderableClusterOptionsResponse]
readsPrec :: Int -> ReadS DescribeOrderableClusterOptionsResponse
$creadsPrec :: Int -> ReadS DescribeOrderableClusterOptionsResponse
Prelude.Read, Int -> DescribeOrderableClusterOptionsResponse -> ShowS
[DescribeOrderableClusterOptionsResponse] -> ShowS
DescribeOrderableClusterOptionsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeOrderableClusterOptionsResponse] -> ShowS
$cshowList :: [DescribeOrderableClusterOptionsResponse] -> ShowS
show :: DescribeOrderableClusterOptionsResponse -> String
$cshow :: DescribeOrderableClusterOptionsResponse -> String
showsPrec :: Int -> DescribeOrderableClusterOptionsResponse -> ShowS
$cshowsPrec :: Int -> DescribeOrderableClusterOptionsResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeOrderableClusterOptionsResponse x
-> DescribeOrderableClusterOptionsResponse
forall x.
DescribeOrderableClusterOptionsResponse
-> Rep DescribeOrderableClusterOptionsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeOrderableClusterOptionsResponse x
-> DescribeOrderableClusterOptionsResponse
$cfrom :: forall x.
DescribeOrderableClusterOptionsResponse
-> Rep DescribeOrderableClusterOptionsResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeOrderableClusterOptionsResponse' 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:
--
-- 'marker', 'describeOrderableClusterOptionsResponse_marker' - A value that indicates the starting point for the next set of response
-- records in a subsequent request. If a value is returned in a response,
-- you can retrieve the next set of records by providing this returned
-- marker value in the @Marker@ parameter and retrying the command. If the
-- @Marker@ field is empty, all response records have been retrieved for
-- the request.
--
-- 'orderableClusterOptions', 'describeOrderableClusterOptionsResponse_orderableClusterOptions' - An @OrderableClusterOption@ structure containing information about
-- orderable options for the cluster.
--
-- 'httpStatus', 'describeOrderableClusterOptionsResponse_httpStatus' - The response's http status code.
newDescribeOrderableClusterOptionsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeOrderableClusterOptionsResponse
newDescribeOrderableClusterOptionsResponse :: Int -> DescribeOrderableClusterOptionsResponse
newDescribeOrderableClusterOptionsResponse
  Int
pHttpStatus_ =
    DescribeOrderableClusterOptionsResponse'
      { $sel:marker:DescribeOrderableClusterOptionsResponse' :: Maybe Text
marker =
          forall a. Maybe a
Prelude.Nothing,
        $sel:orderableClusterOptions:DescribeOrderableClusterOptionsResponse' :: Maybe [OrderableClusterOption]
orderableClusterOptions =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:DescribeOrderableClusterOptionsResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | A value that indicates the starting point for the next set of response
-- records in a subsequent request. If a value is returned in a response,
-- you can retrieve the next set of records by providing this returned
-- marker value in the @Marker@ parameter and retrying the command. If the
-- @Marker@ field is empty, all response records have been retrieved for
-- the request.
describeOrderableClusterOptionsResponse_marker :: Lens.Lens' DescribeOrderableClusterOptionsResponse (Prelude.Maybe Prelude.Text)
describeOrderableClusterOptionsResponse_marker :: Lens' DescribeOrderableClusterOptionsResponse (Maybe Text)
describeOrderableClusterOptionsResponse_marker = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeOrderableClusterOptionsResponse' {Maybe Text
marker :: Maybe Text
$sel:marker:DescribeOrderableClusterOptionsResponse' :: DescribeOrderableClusterOptionsResponse -> Maybe Text
marker} -> Maybe Text
marker) (\s :: DescribeOrderableClusterOptionsResponse
s@DescribeOrderableClusterOptionsResponse' {} Maybe Text
a -> DescribeOrderableClusterOptionsResponse
s {$sel:marker:DescribeOrderableClusterOptionsResponse' :: Maybe Text
marker = Maybe Text
a} :: DescribeOrderableClusterOptionsResponse)

-- | An @OrderableClusterOption@ structure containing information about
-- orderable options for the cluster.
describeOrderableClusterOptionsResponse_orderableClusterOptions :: Lens.Lens' DescribeOrderableClusterOptionsResponse (Prelude.Maybe [OrderableClusterOption])
describeOrderableClusterOptionsResponse_orderableClusterOptions :: Lens'
  DescribeOrderableClusterOptionsResponse
  (Maybe [OrderableClusterOption])
describeOrderableClusterOptionsResponse_orderableClusterOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeOrderableClusterOptionsResponse' {Maybe [OrderableClusterOption]
orderableClusterOptions :: Maybe [OrderableClusterOption]
$sel:orderableClusterOptions:DescribeOrderableClusterOptionsResponse' :: DescribeOrderableClusterOptionsResponse
-> Maybe [OrderableClusterOption]
orderableClusterOptions} -> Maybe [OrderableClusterOption]
orderableClusterOptions) (\s :: DescribeOrderableClusterOptionsResponse
s@DescribeOrderableClusterOptionsResponse' {} Maybe [OrderableClusterOption]
a -> DescribeOrderableClusterOptionsResponse
s {$sel:orderableClusterOptions:DescribeOrderableClusterOptionsResponse' :: Maybe [OrderableClusterOption]
orderableClusterOptions = Maybe [OrderableClusterOption]
a} :: DescribeOrderableClusterOptionsResponse) 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.
describeOrderableClusterOptionsResponse_httpStatus :: Lens.Lens' DescribeOrderableClusterOptionsResponse Prelude.Int
describeOrderableClusterOptionsResponse_httpStatus :: Lens' DescribeOrderableClusterOptionsResponse Int
describeOrderableClusterOptionsResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeOrderableClusterOptionsResponse' {Int
httpStatus :: Int
$sel:httpStatus:DescribeOrderableClusterOptionsResponse' :: DescribeOrderableClusterOptionsResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: DescribeOrderableClusterOptionsResponse
s@DescribeOrderableClusterOptionsResponse' {} Int
a -> DescribeOrderableClusterOptionsResponse
s {$sel:httpStatus:DescribeOrderableClusterOptionsResponse' :: Int
httpStatus = Int
a} :: DescribeOrderableClusterOptionsResponse)

instance
  Prelude.NFData
    DescribeOrderableClusterOptionsResponse
  where
  rnf :: DescribeOrderableClusterOptionsResponse -> ()
rnf DescribeOrderableClusterOptionsResponse' {Int
Maybe [OrderableClusterOption]
Maybe Text
httpStatus :: Int
orderableClusterOptions :: Maybe [OrderableClusterOption]
marker :: Maybe Text
$sel:httpStatus:DescribeOrderableClusterOptionsResponse' :: DescribeOrderableClusterOptionsResponse -> Int
$sel:orderableClusterOptions:DescribeOrderableClusterOptionsResponse' :: DescribeOrderableClusterOptionsResponse
-> Maybe [OrderableClusterOption]
$sel:marker:DescribeOrderableClusterOptionsResponse' :: DescribeOrderableClusterOptionsResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
marker
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [OrderableClusterOption]
orderableClusterOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus