{-# 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.Snowball.CreateCluster
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates an empty cluster. Each cluster supports five nodes. You use the
-- CreateJob action separately to create the jobs for each of these nodes.
-- The cluster does not ship until these five node jobs have been created.
module Amazonka.Snowball.CreateCluster
  ( -- * Creating a Request
    CreateCluster (..),
    newCreateCluster,

    -- * Request Lenses
    createCluster_description,
    createCluster_forwardingAddressId,
    createCluster_kmsKeyARN,
    createCluster_notification,
    createCluster_onDeviceServiceConfiguration,
    createCluster_remoteManagement,
    createCluster_taxDocuments,
    createCluster_jobType,
    createCluster_resources,
    createCluster_addressId,
    createCluster_roleARN,
    createCluster_snowballType,
    createCluster_shippingOption,

    -- * Destructuring the Response
    CreateClusterResponse (..),
    newCreateClusterResponse,

    -- * Response Lenses
    createClusterResponse_clusterId,
    createClusterResponse_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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.Snowball.Types

-- | /See:/ 'newCreateCluster' smart constructor.
data CreateCluster = CreateCluster'
  { -- | An optional description of this specific cluster, for example
    -- @Environmental Data Cluster-01@.
    CreateCluster -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The forwarding address ID for a cluster. This field is not supported in
    -- most regions.
    CreateCluster -> Maybe Text
forwardingAddressId :: Prelude.Maybe Prelude.Text,
    -- | The @KmsKeyARN@ value that you want to associate with this cluster.
    -- @KmsKeyARN@ values are created by using the
    -- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
    -- API action in Key Management Service (KMS).
    CreateCluster -> Maybe Text
kmsKeyARN :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Simple Notification Service (Amazon SNS) notification
    -- settings for this cluster.
    CreateCluster -> Maybe Notification
notification :: Prelude.Maybe Notification,
    -- | Specifies the service or services on the Snow Family device that your
    -- transferred data will be exported from or imported into. Amazon Web
    -- Services Snow Family device clusters support Amazon S3 and NFS (Network
    -- File System).
    CreateCluster -> Maybe OnDeviceServiceConfiguration
onDeviceServiceConfiguration :: Prelude.Maybe OnDeviceServiceConfiguration,
    -- | Allows you to securely operate and manage Snow devices in a cluster
    -- remotely from outside of your internal network. When set to
    -- @INSTALLED_AUTOSTART@, remote management will automatically be available
    -- when the device arrives at your location. Otherwise, you need to use the
    -- Snowball Client to manage the device.
    CreateCluster -> Maybe RemoteManagement
remoteManagement :: Prelude.Maybe RemoteManagement,
    -- | The tax documents required in your Amazon Web Services Region.
    CreateCluster -> Maybe TaxDocuments
taxDocuments :: Prelude.Maybe TaxDocuments,
    -- | The type of job for this cluster. Currently, the only job type supported
    -- for clusters is @LOCAL_USE@.
    --
    -- For more information, see
    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
    CreateCluster -> JobType
jobType :: JobType,
    -- | The resources associated with the cluster job. These resources include
    -- Amazon S3 buckets and optional Lambda functions written in the Python
    -- language.
    CreateCluster -> JobResource
resources :: JobResource,
    -- | The ID for the address that you want the cluster shipped to.
    CreateCluster -> Text
addressId :: Prelude.Text,
    -- | The @RoleARN@ that you want to associate with this cluster. @RoleArn@
    -- values are created by using the
    -- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
    -- API action in Identity and Access Management (IAM).
    CreateCluster -> Text
roleARN :: Prelude.Text,
    -- | The type of Snow Family devices to use for this cluster.
    --
    -- For cluster jobs, Amazon Web Services Snow Family currently supports
    -- only the @EDGE@ device type.
    --
    -- For more information, see
    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
    CreateCluster -> SnowballType
snowballType :: SnowballType,
    -- | The shipping speed for each node in this cluster. This speed doesn\'t
    -- dictate how soon you\'ll get each Snowball Edge device, rather it
    -- represents how quickly each device moves to its destination while in
    -- transit. Regional shipping speeds are as follows:
    --
    -- -   In Australia, you have access to express shipping. Typically, Snow
    --     devices shipped express are delivered in about a day.
    --
    -- -   In the European Union (EU), you have access to express shipping.
    --     Typically, Snow devices shipped express are delivered in about a
    --     day. In addition, most countries in the EU have access to standard
    --     shipping, which typically takes less than a week, one way.
    --
    -- -   In India, Snow devices are delivered in one to seven days.
    --
    -- -   In the United States of America (US), you have access to one-day
    --     shipping and two-day shipping.
    --
    -- -   In Australia, you have access to express shipping. Typically,
    --     devices shipped express are delivered in about a day.
    --
    -- -   In the European Union (EU), you have access to express shipping.
    --     Typically, Snow devices shipped express are delivered in about a
    --     day. In addition, most countries in the EU have access to standard
    --     shipping, which typically takes less than a week, one way.
    --
    -- -   In India, Snow devices are delivered in one to seven days.
    --
    -- -   In the US, you have access to one-day shipping and two-day shipping.
    CreateCluster -> ShippingOption
shippingOption :: ShippingOption
  }
  deriving (CreateCluster -> CreateCluster -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateCluster -> CreateCluster -> Bool
$c/= :: CreateCluster -> CreateCluster -> Bool
== :: CreateCluster -> CreateCluster -> Bool
$c== :: CreateCluster -> CreateCluster -> Bool
Prelude.Eq, ReadPrec [CreateCluster]
ReadPrec CreateCluster
Int -> ReadS CreateCluster
ReadS [CreateCluster]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateCluster]
$creadListPrec :: ReadPrec [CreateCluster]
readPrec :: ReadPrec CreateCluster
$creadPrec :: ReadPrec CreateCluster
readList :: ReadS [CreateCluster]
$creadList :: ReadS [CreateCluster]
readsPrec :: Int -> ReadS CreateCluster
$creadsPrec :: Int -> ReadS CreateCluster
Prelude.Read, Int -> CreateCluster -> ShowS
[CreateCluster] -> ShowS
CreateCluster -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateCluster] -> ShowS
$cshowList :: [CreateCluster] -> ShowS
show :: CreateCluster -> String
$cshow :: CreateCluster -> String
showsPrec :: Int -> CreateCluster -> ShowS
$cshowsPrec :: Int -> CreateCluster -> ShowS
Prelude.Show, forall x. Rep CreateCluster x -> CreateCluster
forall x. CreateCluster -> Rep CreateCluster x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateCluster x -> CreateCluster
$cfrom :: forall x. CreateCluster -> Rep CreateCluster x
Prelude.Generic)

-- |
-- Create a value of 'CreateCluster' 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:
--
-- 'description', 'createCluster_description' - An optional description of this specific cluster, for example
-- @Environmental Data Cluster-01@.
--
-- 'forwardingAddressId', 'createCluster_forwardingAddressId' - The forwarding address ID for a cluster. This field is not supported in
-- most regions.
--
-- 'kmsKeyARN', 'createCluster_kmsKeyARN' - The @KmsKeyARN@ value that you want to associate with this cluster.
-- @KmsKeyARN@ values are created by using the
-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
-- API action in Key Management Service (KMS).
--
-- 'notification', 'createCluster_notification' - The Amazon Simple Notification Service (Amazon SNS) notification
-- settings for this cluster.
--
-- 'onDeviceServiceConfiguration', 'createCluster_onDeviceServiceConfiguration' - Specifies the service or services on the Snow Family device that your
-- transferred data will be exported from or imported into. Amazon Web
-- Services Snow Family device clusters support Amazon S3 and NFS (Network
-- File System).
--
-- 'remoteManagement', 'createCluster_remoteManagement' - Allows you to securely operate and manage Snow devices in a cluster
-- remotely from outside of your internal network. When set to
-- @INSTALLED_AUTOSTART@, remote management will automatically be available
-- when the device arrives at your location. Otherwise, you need to use the
-- Snowball Client to manage the device.
--
-- 'taxDocuments', 'createCluster_taxDocuments' - The tax documents required in your Amazon Web Services Region.
--
-- 'jobType', 'createCluster_jobType' - The type of job for this cluster. Currently, the only job type supported
-- for clusters is @LOCAL_USE@.
--
-- For more information, see
-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
--
-- 'resources', 'createCluster_resources' - The resources associated with the cluster job. These resources include
-- Amazon S3 buckets and optional Lambda functions written in the Python
-- language.
--
-- 'addressId', 'createCluster_addressId' - The ID for the address that you want the cluster shipped to.
--
-- 'roleARN', 'createCluster_roleARN' - The @RoleARN@ that you want to associate with this cluster. @RoleArn@
-- values are created by using the
-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
-- API action in Identity and Access Management (IAM).
--
-- 'snowballType', 'createCluster_snowballType' - The type of Snow Family devices to use for this cluster.
--
-- For cluster jobs, Amazon Web Services Snow Family currently supports
-- only the @EDGE@ device type.
--
-- For more information, see
-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
--
-- 'shippingOption', 'createCluster_shippingOption' - The shipping speed for each node in this cluster. This speed doesn\'t
-- dictate how soon you\'ll get each Snowball Edge device, rather it
-- represents how quickly each device moves to its destination while in
-- transit. Regional shipping speeds are as follows:
--
-- -   In Australia, you have access to express shipping. Typically, Snow
--     devices shipped express are delivered in about a day.
--
-- -   In the European Union (EU), you have access to express shipping.
--     Typically, Snow devices shipped express are delivered in about a
--     day. In addition, most countries in the EU have access to standard
--     shipping, which typically takes less than a week, one way.
--
-- -   In India, Snow devices are delivered in one to seven days.
--
-- -   In the United States of America (US), you have access to one-day
--     shipping and two-day shipping.
--
-- -   In Australia, you have access to express shipping. Typically,
--     devices shipped express are delivered in about a day.
--
-- -   In the European Union (EU), you have access to express shipping.
--     Typically, Snow devices shipped express are delivered in about a
--     day. In addition, most countries in the EU have access to standard
--     shipping, which typically takes less than a week, one way.
--
-- -   In India, Snow devices are delivered in one to seven days.
--
-- -   In the US, you have access to one-day shipping and two-day shipping.
newCreateCluster ::
  -- | 'jobType'
  JobType ->
  -- | 'resources'
  JobResource ->
  -- | 'addressId'
  Prelude.Text ->
  -- | 'roleARN'
  Prelude.Text ->
  -- | 'snowballType'
  SnowballType ->
  -- | 'shippingOption'
  ShippingOption ->
  CreateCluster
newCreateCluster :: JobType
-> JobResource
-> Text
-> Text
-> SnowballType
-> ShippingOption
-> CreateCluster
newCreateCluster
  JobType
pJobType_
  JobResource
pResources_
  Text
pAddressId_
  Text
pRoleARN_
  SnowballType
pSnowballType_
  ShippingOption
pShippingOption_ =
    CreateCluster'
      { $sel:description:CreateCluster' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
        $sel:forwardingAddressId:CreateCluster' :: Maybe Text
forwardingAddressId = forall a. Maybe a
Prelude.Nothing,
        $sel:kmsKeyARN:CreateCluster' :: Maybe Text
kmsKeyARN = forall a. Maybe a
Prelude.Nothing,
        $sel:notification:CreateCluster' :: Maybe Notification
notification = forall a. Maybe a
Prelude.Nothing,
        $sel:onDeviceServiceConfiguration:CreateCluster' :: Maybe OnDeviceServiceConfiguration
onDeviceServiceConfiguration = forall a. Maybe a
Prelude.Nothing,
        $sel:remoteManagement:CreateCluster' :: Maybe RemoteManagement
remoteManagement = forall a. Maybe a
Prelude.Nothing,
        $sel:taxDocuments:CreateCluster' :: Maybe TaxDocuments
taxDocuments = forall a. Maybe a
Prelude.Nothing,
        $sel:jobType:CreateCluster' :: JobType
jobType = JobType
pJobType_,
        $sel:resources:CreateCluster' :: JobResource
resources = JobResource
pResources_,
        $sel:addressId:CreateCluster' :: Text
addressId = Text
pAddressId_,
        $sel:roleARN:CreateCluster' :: Text
roleARN = Text
pRoleARN_,
        $sel:snowballType:CreateCluster' :: SnowballType
snowballType = SnowballType
pSnowballType_,
        $sel:shippingOption:CreateCluster' :: ShippingOption
shippingOption = ShippingOption
pShippingOption_
      }

-- | An optional description of this specific cluster, for example
-- @Environmental Data Cluster-01@.
createCluster_description :: Lens.Lens' CreateCluster (Prelude.Maybe Prelude.Text)
createCluster_description :: Lens' CreateCluster (Maybe Text)
createCluster_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {Maybe Text
description :: Maybe Text
$sel:description:CreateCluster' :: CreateCluster -> Maybe Text
description} -> Maybe Text
description) (\s :: CreateCluster
s@CreateCluster' {} Maybe Text
a -> CreateCluster
s {$sel:description:CreateCluster' :: Maybe Text
description = Maybe Text
a} :: CreateCluster)

-- | The forwarding address ID for a cluster. This field is not supported in
-- most regions.
createCluster_forwardingAddressId :: Lens.Lens' CreateCluster (Prelude.Maybe Prelude.Text)
createCluster_forwardingAddressId :: Lens' CreateCluster (Maybe Text)
createCluster_forwardingAddressId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {Maybe Text
forwardingAddressId :: Maybe Text
$sel:forwardingAddressId:CreateCluster' :: CreateCluster -> Maybe Text
forwardingAddressId} -> Maybe Text
forwardingAddressId) (\s :: CreateCluster
s@CreateCluster' {} Maybe Text
a -> CreateCluster
s {$sel:forwardingAddressId:CreateCluster' :: Maybe Text
forwardingAddressId = Maybe Text
a} :: CreateCluster)

-- | The @KmsKeyARN@ value that you want to associate with this cluster.
-- @KmsKeyARN@ values are created by using the
-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
-- API action in Key Management Service (KMS).
createCluster_kmsKeyARN :: Lens.Lens' CreateCluster (Prelude.Maybe Prelude.Text)
createCluster_kmsKeyARN :: Lens' CreateCluster (Maybe Text)
createCluster_kmsKeyARN = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {Maybe Text
kmsKeyARN :: Maybe Text
$sel:kmsKeyARN:CreateCluster' :: CreateCluster -> Maybe Text
kmsKeyARN} -> Maybe Text
kmsKeyARN) (\s :: CreateCluster
s@CreateCluster' {} Maybe Text
a -> CreateCluster
s {$sel:kmsKeyARN:CreateCluster' :: Maybe Text
kmsKeyARN = Maybe Text
a} :: CreateCluster)

-- | The Amazon Simple Notification Service (Amazon SNS) notification
-- settings for this cluster.
createCluster_notification :: Lens.Lens' CreateCluster (Prelude.Maybe Notification)
createCluster_notification :: Lens' CreateCluster (Maybe Notification)
createCluster_notification = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {Maybe Notification
notification :: Maybe Notification
$sel:notification:CreateCluster' :: CreateCluster -> Maybe Notification
notification} -> Maybe Notification
notification) (\s :: CreateCluster
s@CreateCluster' {} Maybe Notification
a -> CreateCluster
s {$sel:notification:CreateCluster' :: Maybe Notification
notification = Maybe Notification
a} :: CreateCluster)

-- | Specifies the service or services on the Snow Family device that your
-- transferred data will be exported from or imported into. Amazon Web
-- Services Snow Family device clusters support Amazon S3 and NFS (Network
-- File System).
createCluster_onDeviceServiceConfiguration :: Lens.Lens' CreateCluster (Prelude.Maybe OnDeviceServiceConfiguration)
createCluster_onDeviceServiceConfiguration :: Lens' CreateCluster (Maybe OnDeviceServiceConfiguration)
createCluster_onDeviceServiceConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {Maybe OnDeviceServiceConfiguration
onDeviceServiceConfiguration :: Maybe OnDeviceServiceConfiguration
$sel:onDeviceServiceConfiguration:CreateCluster' :: CreateCluster -> Maybe OnDeviceServiceConfiguration
onDeviceServiceConfiguration} -> Maybe OnDeviceServiceConfiguration
onDeviceServiceConfiguration) (\s :: CreateCluster
s@CreateCluster' {} Maybe OnDeviceServiceConfiguration
a -> CreateCluster
s {$sel:onDeviceServiceConfiguration:CreateCluster' :: Maybe OnDeviceServiceConfiguration
onDeviceServiceConfiguration = Maybe OnDeviceServiceConfiguration
a} :: CreateCluster)

-- | Allows you to securely operate and manage Snow devices in a cluster
-- remotely from outside of your internal network. When set to
-- @INSTALLED_AUTOSTART@, remote management will automatically be available
-- when the device arrives at your location. Otherwise, you need to use the
-- Snowball Client to manage the device.
createCluster_remoteManagement :: Lens.Lens' CreateCluster (Prelude.Maybe RemoteManagement)
createCluster_remoteManagement :: Lens' CreateCluster (Maybe RemoteManagement)
createCluster_remoteManagement = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {Maybe RemoteManagement
remoteManagement :: Maybe RemoteManagement
$sel:remoteManagement:CreateCluster' :: CreateCluster -> Maybe RemoteManagement
remoteManagement} -> Maybe RemoteManagement
remoteManagement) (\s :: CreateCluster
s@CreateCluster' {} Maybe RemoteManagement
a -> CreateCluster
s {$sel:remoteManagement:CreateCluster' :: Maybe RemoteManagement
remoteManagement = Maybe RemoteManagement
a} :: CreateCluster)

-- | The tax documents required in your Amazon Web Services Region.
createCluster_taxDocuments :: Lens.Lens' CreateCluster (Prelude.Maybe TaxDocuments)
createCluster_taxDocuments :: Lens' CreateCluster (Maybe TaxDocuments)
createCluster_taxDocuments = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {Maybe TaxDocuments
taxDocuments :: Maybe TaxDocuments
$sel:taxDocuments:CreateCluster' :: CreateCluster -> Maybe TaxDocuments
taxDocuments} -> Maybe TaxDocuments
taxDocuments) (\s :: CreateCluster
s@CreateCluster' {} Maybe TaxDocuments
a -> CreateCluster
s {$sel:taxDocuments:CreateCluster' :: Maybe TaxDocuments
taxDocuments = Maybe TaxDocuments
a} :: CreateCluster)

-- | The type of job for this cluster. Currently, the only job type supported
-- for clusters is @LOCAL_USE@.
--
-- For more information, see
-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
createCluster_jobType :: Lens.Lens' CreateCluster JobType
createCluster_jobType :: Lens' CreateCluster JobType
createCluster_jobType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {JobType
jobType :: JobType
$sel:jobType:CreateCluster' :: CreateCluster -> JobType
jobType} -> JobType
jobType) (\s :: CreateCluster
s@CreateCluster' {} JobType
a -> CreateCluster
s {$sel:jobType:CreateCluster' :: JobType
jobType = JobType
a} :: CreateCluster)

-- | The resources associated with the cluster job. These resources include
-- Amazon S3 buckets and optional Lambda functions written in the Python
-- language.
createCluster_resources :: Lens.Lens' CreateCluster JobResource
createCluster_resources :: Lens' CreateCluster JobResource
createCluster_resources = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {JobResource
resources :: JobResource
$sel:resources:CreateCluster' :: CreateCluster -> JobResource
resources} -> JobResource
resources) (\s :: CreateCluster
s@CreateCluster' {} JobResource
a -> CreateCluster
s {$sel:resources:CreateCluster' :: JobResource
resources = JobResource
a} :: CreateCluster)

-- | The ID for the address that you want the cluster shipped to.
createCluster_addressId :: Lens.Lens' CreateCluster Prelude.Text
createCluster_addressId :: Lens' CreateCluster Text
createCluster_addressId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {Text
addressId :: Text
$sel:addressId:CreateCluster' :: CreateCluster -> Text
addressId} -> Text
addressId) (\s :: CreateCluster
s@CreateCluster' {} Text
a -> CreateCluster
s {$sel:addressId:CreateCluster' :: Text
addressId = Text
a} :: CreateCluster)

-- | The @RoleARN@ that you want to associate with this cluster. @RoleArn@
-- values are created by using the
-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
-- API action in Identity and Access Management (IAM).
createCluster_roleARN :: Lens.Lens' CreateCluster Prelude.Text
createCluster_roleARN :: Lens' CreateCluster Text
createCluster_roleARN = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {Text
roleARN :: Text
$sel:roleARN:CreateCluster' :: CreateCluster -> Text
roleARN} -> Text
roleARN) (\s :: CreateCluster
s@CreateCluster' {} Text
a -> CreateCluster
s {$sel:roleARN:CreateCluster' :: Text
roleARN = Text
a} :: CreateCluster)

-- | The type of Snow Family devices to use for this cluster.
--
-- For cluster jobs, Amazon Web Services Snow Family currently supports
-- only the @EDGE@ device type.
--
-- For more information, see
-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
createCluster_snowballType :: Lens.Lens' CreateCluster SnowballType
createCluster_snowballType :: Lens' CreateCluster SnowballType
createCluster_snowballType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {SnowballType
snowballType :: SnowballType
$sel:snowballType:CreateCluster' :: CreateCluster -> SnowballType
snowballType} -> SnowballType
snowballType) (\s :: CreateCluster
s@CreateCluster' {} SnowballType
a -> CreateCluster
s {$sel:snowballType:CreateCluster' :: SnowballType
snowballType = SnowballType
a} :: CreateCluster)

-- | The shipping speed for each node in this cluster. This speed doesn\'t
-- dictate how soon you\'ll get each Snowball Edge device, rather it
-- represents how quickly each device moves to its destination while in
-- transit. Regional shipping speeds are as follows:
--
-- -   In Australia, you have access to express shipping. Typically, Snow
--     devices shipped express are delivered in about a day.
--
-- -   In the European Union (EU), you have access to express shipping.
--     Typically, Snow devices shipped express are delivered in about a
--     day. In addition, most countries in the EU have access to standard
--     shipping, which typically takes less than a week, one way.
--
-- -   In India, Snow devices are delivered in one to seven days.
--
-- -   In the United States of America (US), you have access to one-day
--     shipping and two-day shipping.
--
-- -   In Australia, you have access to express shipping. Typically,
--     devices shipped express are delivered in about a day.
--
-- -   In the European Union (EU), you have access to express shipping.
--     Typically, Snow devices shipped express are delivered in about a
--     day. In addition, most countries in the EU have access to standard
--     shipping, which typically takes less than a week, one way.
--
-- -   In India, Snow devices are delivered in one to seven days.
--
-- -   In the US, you have access to one-day shipping and two-day shipping.
createCluster_shippingOption :: Lens.Lens' CreateCluster ShippingOption
createCluster_shippingOption :: Lens' CreateCluster ShippingOption
createCluster_shippingOption = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateCluster' {ShippingOption
shippingOption :: ShippingOption
$sel:shippingOption:CreateCluster' :: CreateCluster -> ShippingOption
shippingOption} -> ShippingOption
shippingOption) (\s :: CreateCluster
s@CreateCluster' {} ShippingOption
a -> CreateCluster
s {$sel:shippingOption:CreateCluster' :: ShippingOption
shippingOption = ShippingOption
a} :: CreateCluster)

instance Core.AWSRequest CreateCluster where
  type
    AWSResponse CreateCluster =
      CreateClusterResponse
  request :: (Service -> Service) -> CreateCluster -> Request CreateCluster
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 CreateCluster
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateCluster)))
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 Text -> Int -> CreateClusterResponse
CreateClusterResponse'
            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
"ClusterId")
            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 CreateCluster where
  hashWithSalt :: Int -> CreateCluster -> Int
hashWithSalt Int
_salt CreateCluster' {Maybe Text
Maybe Notification
Maybe RemoteManagement
Maybe OnDeviceServiceConfiguration
Maybe TaxDocuments
Text
JobType
ShippingOption
SnowballType
JobResource
shippingOption :: ShippingOption
snowballType :: SnowballType
roleARN :: Text
addressId :: Text
resources :: JobResource
jobType :: JobType
taxDocuments :: Maybe TaxDocuments
remoteManagement :: Maybe RemoteManagement
onDeviceServiceConfiguration :: Maybe OnDeviceServiceConfiguration
notification :: Maybe Notification
kmsKeyARN :: Maybe Text
forwardingAddressId :: Maybe Text
description :: Maybe Text
$sel:shippingOption:CreateCluster' :: CreateCluster -> ShippingOption
$sel:snowballType:CreateCluster' :: CreateCluster -> SnowballType
$sel:roleARN:CreateCluster' :: CreateCluster -> Text
$sel:addressId:CreateCluster' :: CreateCluster -> Text
$sel:resources:CreateCluster' :: CreateCluster -> JobResource
$sel:jobType:CreateCluster' :: CreateCluster -> JobType
$sel:taxDocuments:CreateCluster' :: CreateCluster -> Maybe TaxDocuments
$sel:remoteManagement:CreateCluster' :: CreateCluster -> Maybe RemoteManagement
$sel:onDeviceServiceConfiguration:CreateCluster' :: CreateCluster -> Maybe OnDeviceServiceConfiguration
$sel:notification:CreateCluster' :: CreateCluster -> Maybe Notification
$sel:kmsKeyARN:CreateCluster' :: CreateCluster -> Maybe Text
$sel:forwardingAddressId:CreateCluster' :: CreateCluster -> Maybe Text
$sel:description:CreateCluster' :: CreateCluster -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
forwardingAddressId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
kmsKeyARN
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Notification
notification
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe OnDeviceServiceConfiguration
onDeviceServiceConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RemoteManagement
remoteManagement
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TaxDocuments
taxDocuments
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` JobType
jobType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` JobResource
resources
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
addressId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
roleARN
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` SnowballType
snowballType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ShippingOption
shippingOption

instance Prelude.NFData CreateCluster where
  rnf :: CreateCluster -> ()
rnf CreateCluster' {Maybe Text
Maybe Notification
Maybe RemoteManagement
Maybe OnDeviceServiceConfiguration
Maybe TaxDocuments
Text
JobType
ShippingOption
SnowballType
JobResource
shippingOption :: ShippingOption
snowballType :: SnowballType
roleARN :: Text
addressId :: Text
resources :: JobResource
jobType :: JobType
taxDocuments :: Maybe TaxDocuments
remoteManagement :: Maybe RemoteManagement
onDeviceServiceConfiguration :: Maybe OnDeviceServiceConfiguration
notification :: Maybe Notification
kmsKeyARN :: Maybe Text
forwardingAddressId :: Maybe Text
description :: Maybe Text
$sel:shippingOption:CreateCluster' :: CreateCluster -> ShippingOption
$sel:snowballType:CreateCluster' :: CreateCluster -> SnowballType
$sel:roleARN:CreateCluster' :: CreateCluster -> Text
$sel:addressId:CreateCluster' :: CreateCluster -> Text
$sel:resources:CreateCluster' :: CreateCluster -> JobResource
$sel:jobType:CreateCluster' :: CreateCluster -> JobType
$sel:taxDocuments:CreateCluster' :: CreateCluster -> Maybe TaxDocuments
$sel:remoteManagement:CreateCluster' :: CreateCluster -> Maybe RemoteManagement
$sel:onDeviceServiceConfiguration:CreateCluster' :: CreateCluster -> Maybe OnDeviceServiceConfiguration
$sel:notification:CreateCluster' :: CreateCluster -> Maybe Notification
$sel:kmsKeyARN:CreateCluster' :: CreateCluster -> Maybe Text
$sel:forwardingAddressId:CreateCluster' :: CreateCluster -> Maybe Text
$sel:description:CreateCluster' :: CreateCluster -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
forwardingAddressId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
kmsKeyARN
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Notification
notification
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe OnDeviceServiceConfiguration
onDeviceServiceConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RemoteManagement
remoteManagement
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TaxDocuments
taxDocuments
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf JobType
jobType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf JobResource
resources
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
addressId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
roleARN
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf SnowballType
snowballType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ShippingOption
shippingOption

instance Data.ToHeaders CreateCluster where
  toHeaders :: CreateCluster -> 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
"AWSIESnowballJobManagementService.CreateCluster" ::
                          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 CreateCluster where
  toJSON :: CreateCluster -> Value
toJSON CreateCluster' {Maybe Text
Maybe Notification
Maybe RemoteManagement
Maybe OnDeviceServiceConfiguration
Maybe TaxDocuments
Text
JobType
ShippingOption
SnowballType
JobResource
shippingOption :: ShippingOption
snowballType :: SnowballType
roleARN :: Text
addressId :: Text
resources :: JobResource
jobType :: JobType
taxDocuments :: Maybe TaxDocuments
remoteManagement :: Maybe RemoteManagement
onDeviceServiceConfiguration :: Maybe OnDeviceServiceConfiguration
notification :: Maybe Notification
kmsKeyARN :: Maybe Text
forwardingAddressId :: Maybe Text
description :: Maybe Text
$sel:shippingOption:CreateCluster' :: CreateCluster -> ShippingOption
$sel:snowballType:CreateCluster' :: CreateCluster -> SnowballType
$sel:roleARN:CreateCluster' :: CreateCluster -> Text
$sel:addressId:CreateCluster' :: CreateCluster -> Text
$sel:resources:CreateCluster' :: CreateCluster -> JobResource
$sel:jobType:CreateCluster' :: CreateCluster -> JobType
$sel:taxDocuments:CreateCluster' :: CreateCluster -> Maybe TaxDocuments
$sel:remoteManagement:CreateCluster' :: CreateCluster -> Maybe RemoteManagement
$sel:onDeviceServiceConfiguration:CreateCluster' :: CreateCluster -> Maybe OnDeviceServiceConfiguration
$sel:notification:CreateCluster' :: CreateCluster -> Maybe Notification
$sel:kmsKeyARN:CreateCluster' :: CreateCluster -> Maybe Text
$sel:forwardingAddressId:CreateCluster' :: CreateCluster -> Maybe Text
$sel:description:CreateCluster' :: CreateCluster -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Description" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
description,
            (Key
"ForwardingAddressId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
forwardingAddressId,
            (Key
"KmsKeyARN" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
kmsKeyARN,
            (Key
"Notification" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Notification
notification,
            (Key
"OnDeviceServiceConfiguration" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe OnDeviceServiceConfiguration
onDeviceServiceConfiguration,
            (Key
"RemoteManagement" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe RemoteManagement
remoteManagement,
            (Key
"TaxDocuments" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe TaxDocuments
taxDocuments,
            forall a. a -> Maybe a
Prelude.Just (Key
"JobType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= JobType
jobType),
            forall a. a -> Maybe a
Prelude.Just (Key
"Resources" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= JobResource
resources),
            forall a. a -> Maybe a
Prelude.Just (Key
"AddressId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
addressId),
            forall a. a -> Maybe a
Prelude.Just (Key
"RoleARN" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
roleARN),
            forall a. a -> Maybe a
Prelude.Just (Key
"SnowballType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= SnowballType
snowballType),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"ShippingOption" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ShippingOption
shippingOption)
          ]
      )

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

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

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

-- |
-- Create a value of 'CreateClusterResponse' 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:
--
-- 'clusterId', 'createClusterResponse_clusterId' - The automatically generated ID for a cluster.
--
-- 'httpStatus', 'createClusterResponse_httpStatus' - The response's http status code.
newCreateClusterResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateClusterResponse
newCreateClusterResponse :: Int -> CreateClusterResponse
newCreateClusterResponse Int
pHttpStatus_ =
  CreateClusterResponse'
    { $sel:clusterId:CreateClusterResponse' :: Maybe Text
clusterId = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateClusterResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The automatically generated ID for a cluster.
createClusterResponse_clusterId :: Lens.Lens' CreateClusterResponse (Prelude.Maybe Prelude.Text)
createClusterResponse_clusterId :: Lens' CreateClusterResponse (Maybe Text)
createClusterResponse_clusterId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateClusterResponse' {Maybe Text
clusterId :: Maybe Text
$sel:clusterId:CreateClusterResponse' :: CreateClusterResponse -> Maybe Text
clusterId} -> Maybe Text
clusterId) (\s :: CreateClusterResponse
s@CreateClusterResponse' {} Maybe Text
a -> CreateClusterResponse
s {$sel:clusterId:CreateClusterResponse' :: Maybe Text
clusterId = Maybe Text
a} :: CreateClusterResponse)

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

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