{-# 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-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- 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_marker,
    describeOrderableClusterOptions_maxRecords,
    describeOrderableClusterOptions_clusterVersion,
    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.Lens as Lens
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'
  { -- | 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 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,
    -- | 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
(DescribeOrderableClusterOptions
 -> DescribeOrderableClusterOptions -> Bool)
-> (DescribeOrderableClusterOptions
    -> DescribeOrderableClusterOptions -> Bool)
-> Eq DescribeOrderableClusterOptions
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]
(Int -> ReadS DescribeOrderableClusterOptions)
-> ReadS [DescribeOrderableClusterOptions]
-> ReadPrec DescribeOrderableClusterOptions
-> ReadPrec [DescribeOrderableClusterOptions]
-> Read 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
(Int -> DescribeOrderableClusterOptions -> ShowS)
-> (DescribeOrderableClusterOptions -> String)
-> ([DescribeOrderableClusterOptions] -> ShowS)
-> Show DescribeOrderableClusterOptions
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.
 DescribeOrderableClusterOptions
 -> Rep DescribeOrderableClusterOptions x)
-> (forall x.
    Rep DescribeOrderableClusterOptions x
    -> DescribeOrderableClusterOptions)
-> Generic DescribeOrderableClusterOptions
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:
--
-- '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.
--
-- '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.
--
-- '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' :: Maybe Text
-> Maybe Int
-> Maybe Text
-> Maybe Text
-> DescribeOrderableClusterOptions
DescribeOrderableClusterOptions'
    { $sel:marker:DescribeOrderableClusterOptions' :: Maybe Text
marker =
        Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:maxRecords:DescribeOrderableClusterOptions' :: Maybe Int
maxRecords = Maybe Int
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterVersion:DescribeOrderableClusterOptions' :: Maybe Text
clusterVersion = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:nodeType:DescribeOrderableClusterOptions' :: Maybe Text
nodeType = Maybe Text
forall a. Maybe a
Prelude.Nothing
    }

-- | 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 :: (Maybe Text -> f (Maybe Text))
-> DescribeOrderableClusterOptions
-> f DescribeOrderableClusterOptions
describeOrderableClusterOptions_marker = (DescribeOrderableClusterOptions -> Maybe Text)
-> (DescribeOrderableClusterOptions
    -> Maybe Text -> DescribeOrderableClusterOptions)
-> Lens
     DescribeOrderableClusterOptions
     DescribeOrderableClusterOptions
     (Maybe Text)
     (Maybe Text)
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 :: (Maybe Int -> f (Maybe Int))
-> DescribeOrderableClusterOptions
-> f DescribeOrderableClusterOptions
describeOrderableClusterOptions_maxRecords = (DescribeOrderableClusterOptions -> Maybe Int)
-> (DescribeOrderableClusterOptions
    -> Maybe Int -> DescribeOrderableClusterOptions)
-> Lens
     DescribeOrderableClusterOptions
     DescribeOrderableClusterOptions
     (Maybe Int)
     (Maybe Int)
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 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 :: (Maybe Text -> f (Maybe Text))
-> DescribeOrderableClusterOptions
-> f DescribeOrderableClusterOptions
describeOrderableClusterOptions_clusterVersion = (DescribeOrderableClusterOptions -> Maybe Text)
-> (DescribeOrderableClusterOptions
    -> Maybe Text -> DescribeOrderableClusterOptions)
-> Lens
     DescribeOrderableClusterOptions
     DescribeOrderableClusterOptions
     (Maybe Text)
     (Maybe Text)
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)

-- | 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 :: (Maybe Text -> f (Maybe Text))
-> DescribeOrderableClusterOptions
-> f DescribeOrderableClusterOptions
describeOrderableClusterOptions_nodeType = (DescribeOrderableClusterOptions -> Maybe Text)
-> (DescribeOrderableClusterOptions
    -> Maybe Text -> DescribeOrderableClusterOptions)
-> Lens
     DescribeOrderableClusterOptions
     DescribeOrderableClusterOptions
     (Maybe Text)
     (Maybe Text)
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
    | Maybe Text -> Bool
forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribeOrderableClusterOptions
DescribeOrderableClusterOptionsResponse
rs
            DescribeOrderableClusterOptionsResponse
-> Getting
     (First Text) DescribeOrderableClusterOptionsResponse Text
-> Maybe Text
forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? (Maybe Text -> Const (First Text) (Maybe Text))
-> DescribeOrderableClusterOptionsResponse
-> Const (First Text) DescribeOrderableClusterOptionsResponse
Lens' DescribeOrderableClusterOptionsResponse (Maybe Text)
describeOrderableClusterOptionsResponse_marker
              ((Maybe Text -> Const (First Text) (Maybe Text))
 -> DescribeOrderableClusterOptionsResponse
 -> Const (First Text) DescribeOrderableClusterOptionsResponse)
-> ((Text -> Const (First Text) Text)
    -> Maybe Text -> Const (First Text) (Maybe Text))
-> Getting
     (First Text) DescribeOrderableClusterOptionsResponse Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. (Text -> Const (First Text) Text)
-> Maybe Text -> Const (First Text) (Maybe Text)
forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
      Maybe DescribeOrderableClusterOptions
forall a. Maybe a
Prelude.Nothing
    | Maybe [OrderableClusterOption] -> Bool
forall a. AWSTruncated a => a -> Bool
Core.stop
        ( AWSResponse DescribeOrderableClusterOptions
DescribeOrderableClusterOptionsResponse
rs
            DescribeOrderableClusterOptionsResponse
-> Getting
     (First [OrderableClusterOption])
     DescribeOrderableClusterOptionsResponse
     [OrderableClusterOption]
-> Maybe [OrderableClusterOption]
forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? (Maybe [OrderableClusterOption]
 -> Const
      (First [OrderableClusterOption]) (Maybe [OrderableClusterOption]))
-> DescribeOrderableClusterOptionsResponse
-> Const
     (First [OrderableClusterOption])
     DescribeOrderableClusterOptionsResponse
Lens'
  DescribeOrderableClusterOptionsResponse
  (Maybe [OrderableClusterOption])
describeOrderableClusterOptionsResponse_orderableClusterOptions
              ((Maybe [OrderableClusterOption]
  -> Const
       (First [OrderableClusterOption]) (Maybe [OrderableClusterOption]))
 -> DescribeOrderableClusterOptionsResponse
 -> Const
      (First [OrderableClusterOption])
      DescribeOrderableClusterOptionsResponse)
-> (([OrderableClusterOption]
     -> Const (First [OrderableClusterOption]) [OrderableClusterOption])
    -> Maybe [OrderableClusterOption]
    -> Const
         (First [OrderableClusterOption]) (Maybe [OrderableClusterOption]))
-> Getting
     (First [OrderableClusterOption])
     DescribeOrderableClusterOptionsResponse
     [OrderableClusterOption]
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. ([OrderableClusterOption]
 -> Const (First [OrderableClusterOption]) [OrderableClusterOption])
-> Maybe [OrderableClusterOption]
-> Const
     (First [OrderableClusterOption]) (Maybe [OrderableClusterOption])
forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just
        ) =
      Maybe DescribeOrderableClusterOptions
forall a. Maybe a
Prelude.Nothing
    | Bool
Prelude.otherwise =
      DescribeOrderableClusterOptions
-> Maybe DescribeOrderableClusterOptions
forall a. a -> Maybe a
Prelude.Just (DescribeOrderableClusterOptions
 -> Maybe DescribeOrderableClusterOptions)
-> DescribeOrderableClusterOptions
-> Maybe DescribeOrderableClusterOptions
forall a b. (a -> b) -> a -> b
Prelude.$
        DescribeOrderableClusterOptions
rq
          DescribeOrderableClusterOptions
-> (DescribeOrderableClusterOptions
    -> DescribeOrderableClusterOptions)
-> DescribeOrderableClusterOptions
forall a b. a -> (a -> b) -> b
Prelude.& (Maybe Text -> Identity (Maybe Text))
-> DescribeOrderableClusterOptions
-> Identity DescribeOrderableClusterOptions
Lens
  DescribeOrderableClusterOptions
  DescribeOrderableClusterOptions
  (Maybe Text)
  (Maybe Text)
describeOrderableClusterOptions_marker
          ((Maybe Text -> Identity (Maybe Text))
 -> DescribeOrderableClusterOptions
 -> Identity DescribeOrderableClusterOptions)
-> Maybe Text
-> DescribeOrderableClusterOptions
-> DescribeOrderableClusterOptions
forall s t a b. ASetter s t a b -> b -> s -> t
Lens..~ AWSResponse DescribeOrderableClusterOptions
DescribeOrderableClusterOptionsResponse
rs
          DescribeOrderableClusterOptionsResponse
-> Getting
     (First Text) DescribeOrderableClusterOptionsResponse Text
-> Maybe Text
forall s a. s -> Getting (First a) s a -> Maybe a
Lens.^? (Maybe Text -> Const (First Text) (Maybe Text))
-> DescribeOrderableClusterOptionsResponse
-> Const (First Text) DescribeOrderableClusterOptionsResponse
Lens' DescribeOrderableClusterOptionsResponse (Maybe Text)
describeOrderableClusterOptionsResponse_marker
            ((Maybe Text -> Const (First Text) (Maybe Text))
 -> DescribeOrderableClusterOptionsResponse
 -> Const (First Text) DescribeOrderableClusterOptionsResponse)
-> ((Text -> Const (First Text) Text)
    -> Maybe Text -> Const (First Text) (Maybe Text))
-> Getting
     (First Text) DescribeOrderableClusterOptionsResponse Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. (Text -> Const (First Text) Text)
-> Maybe Text -> Const (First Text) (Maybe Text)
forall a b. Prism (Maybe a) (Maybe b) a b
Lens._Just

instance
  Core.AWSRequest
    DescribeOrderableClusterOptions
  where
  type
    AWSResponse DescribeOrderableClusterOptions =
      DescribeOrderableClusterOptionsResponse
  request :: DescribeOrderableClusterOptions
-> Request DescribeOrderableClusterOptions
request = Service
-> DescribeOrderableClusterOptions
-> Request DescribeOrderableClusterOptions
forall a. ToRequest a => Service -> a -> Request a
Request.postQuery Service
defaultService
  response :: Logger
-> Service
-> Proxy DescribeOrderableClusterOptions
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse DescribeOrderableClusterOptions)))
response =
    Text
-> (Int
    -> ResponseHeaders
    -> [Node]
    -> Either String (AWSResponse DescribeOrderableClusterOptions))
-> Logger
-> Service
-> Proxy DescribeOrderableClusterOptions
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse DescribeOrderableClusterOptions)))
forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> Logger
-> 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'
            (Maybe Text
 -> Maybe [OrderableClusterOption]
 -> Int
 -> DescribeOrderableClusterOptionsResponse)
-> Either String (Maybe Text)
-> Either
     String
     (Maybe [OrderableClusterOption]
      -> Int -> DescribeOrderableClusterOptionsResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x [Node] -> Text -> Either String (Maybe Text)
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"Marker")
            Either
  String
  (Maybe [OrderableClusterOption]
   -> Int -> DescribeOrderableClusterOptionsResponse)
-> Either String (Maybe [OrderableClusterOption])
-> Either String (Int -> DescribeOrderableClusterOptionsResponse)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x [Node] -> Text -> Either String (Maybe [Node])
forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Core..@? Text
"OrderableClusterOptions"
                            Either String (Maybe [Node]) -> [Node] -> Either String [Node]
forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ [Node]
forall a. Monoid a => a
Prelude.mempty
                            Either String [Node]
-> ([Node] -> Either String (Maybe [OrderableClusterOption]))
-> Either String (Maybe [OrderableClusterOption])
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= ([Node] -> Either String [OrderableClusterOption])
-> [Node] -> Either String (Maybe [OrderableClusterOption])
forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may
                              (Text -> [Node] -> Either String [OrderableClusterOption]
forall a. FromXML a => Text -> [Node] -> Either String [a]
Core.parseXMLList Text
"OrderableClusterOption")
                        )
            Either String (Int -> DescribeOrderableClusterOptionsResponse)
-> Either String Int
-> Either String DescribeOrderableClusterOptionsResponse
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Int -> Either String Int
forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (Int -> Int
forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    DescribeOrderableClusterOptions

instance
  Prelude.NFData
    DescribeOrderableClusterOptions

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

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

instance Core.ToQuery DescribeOrderableClusterOptions where
  toQuery :: DescribeOrderableClusterOptions -> QueryString
toQuery DescribeOrderableClusterOptions' {Maybe Int
Maybe Text
nodeType :: Maybe Text
clusterVersion :: Maybe Text
maxRecords :: Maybe Int
marker :: Maybe Text
$sel:nodeType:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
$sel:clusterVersion:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
$sel:maxRecords:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Int
$sel:marker:DescribeOrderableClusterOptions' :: DescribeOrderableClusterOptions -> Maybe Text
..} =
    [QueryString] -> QueryString
forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          ByteString -> ByteString -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Core.=: ( ByteString
"DescribeOrderableClusterOptions" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          ByteString -> ByteString -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Core.=: (ByteString
"2012-12-01" :: Prelude.ByteString),
        ByteString
"Marker" ByteString -> Maybe Text -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Core.=: Maybe Text
marker,
        ByteString
"MaxRecords" ByteString -> Maybe Int -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Core.=: Maybe Int
maxRecords,
        ByteString
"ClusterVersion" ByteString -> Maybe Text -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Core.=: Maybe Text
clusterVersion,
        ByteString
"NodeType" ByteString -> Maybe Text -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Core.=: 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
(DescribeOrderableClusterOptionsResponse
 -> DescribeOrderableClusterOptionsResponse -> Bool)
-> (DescribeOrderableClusterOptionsResponse
    -> DescribeOrderableClusterOptionsResponse -> Bool)
-> Eq DescribeOrderableClusterOptionsResponse
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]
(Int -> ReadS DescribeOrderableClusterOptionsResponse)
-> ReadS [DescribeOrderableClusterOptionsResponse]
-> ReadPrec DescribeOrderableClusterOptionsResponse
-> ReadPrec [DescribeOrderableClusterOptionsResponse]
-> Read 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
(Int -> DescribeOrderableClusterOptionsResponse -> ShowS)
-> (DescribeOrderableClusterOptionsResponse -> String)
-> ([DescribeOrderableClusterOptionsResponse] -> ShowS)
-> Show DescribeOrderableClusterOptionsResponse
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.
 DescribeOrderableClusterOptionsResponse
 -> Rep DescribeOrderableClusterOptionsResponse x)
-> (forall x.
    Rep DescribeOrderableClusterOptionsResponse x
    -> DescribeOrderableClusterOptionsResponse)
-> Generic DescribeOrderableClusterOptionsResponse
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' :: Maybe Text
-> Maybe [OrderableClusterOption]
-> Int
-> DescribeOrderableClusterOptionsResponse
DescribeOrderableClusterOptionsResponse'
      { $sel:marker:DescribeOrderableClusterOptionsResponse' :: Maybe Text
marker =
          Maybe Text
forall a. Maybe a
Prelude.Nothing,
        $sel:orderableClusterOptions:DescribeOrderableClusterOptionsResponse' :: Maybe [OrderableClusterOption]
orderableClusterOptions =
          Maybe [OrderableClusterOption]
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 :: (Maybe Text -> f (Maybe Text))
-> DescribeOrderableClusterOptionsResponse
-> f DescribeOrderableClusterOptionsResponse
describeOrderableClusterOptionsResponse_marker = (DescribeOrderableClusterOptionsResponse -> Maybe Text)
-> (DescribeOrderableClusterOptionsResponse
    -> Maybe Text -> DescribeOrderableClusterOptionsResponse)
-> Lens' DescribeOrderableClusterOptionsResponse (Maybe Text)
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 :: (Maybe [OrderableClusterOption]
 -> f (Maybe [OrderableClusterOption]))
-> DescribeOrderableClusterOptionsResponse
-> f DescribeOrderableClusterOptionsResponse
describeOrderableClusterOptionsResponse_orderableClusterOptions = (DescribeOrderableClusterOptionsResponse
 -> Maybe [OrderableClusterOption])
-> (DescribeOrderableClusterOptionsResponse
    -> Maybe [OrderableClusterOption]
    -> DescribeOrderableClusterOptionsResponse)
-> Lens'
     DescribeOrderableClusterOptionsResponse
     (Maybe [OrderableClusterOption])
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) ((Maybe [OrderableClusterOption]
  -> f (Maybe [OrderableClusterOption]))
 -> DescribeOrderableClusterOptionsResponse
 -> f DescribeOrderableClusterOptionsResponse)
-> ((Maybe [OrderableClusterOption]
     -> f (Maybe [OrderableClusterOption]))
    -> Maybe [OrderableClusterOption]
    -> f (Maybe [OrderableClusterOption]))
-> (Maybe [OrderableClusterOption]
    -> f (Maybe [OrderableClusterOption]))
-> DescribeOrderableClusterOptionsResponse
-> f DescribeOrderableClusterOptionsResponse
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  [OrderableClusterOption]
  [OrderableClusterOption]
  [OrderableClusterOption]
  [OrderableClusterOption]
-> Iso
     (Maybe [OrderableClusterOption])
     (Maybe [OrderableClusterOption])
     (Maybe [OrderableClusterOption])
     (Maybe [OrderableClusterOption])
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 AnIso
  [OrderableClusterOption]
  [OrderableClusterOption]
  [OrderableClusterOption]
  [OrderableClusterOption]
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 :: (Int -> f Int)
-> DescribeOrderableClusterOptionsResponse
-> f DescribeOrderableClusterOptionsResponse
describeOrderableClusterOptionsResponse_httpStatus = (DescribeOrderableClusterOptionsResponse -> Int)
-> (DescribeOrderableClusterOptionsResponse
    -> Int -> DescribeOrderableClusterOptionsResponse)
-> Lens
     DescribeOrderableClusterOptionsResponse
     DescribeOrderableClusterOptionsResponse
     Int
     Int
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