{-# 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.AppStream.CreateImageBuilder
-- 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 image builder. An image builder is a virtual machine that is
-- used to create an image.
--
-- The initial state of the builder is @PENDING@. When it is ready, the
-- state is @RUNNING@.
module Amazonka.AppStream.CreateImageBuilder
  ( -- * Creating a Request
    CreateImageBuilder (..),
    newCreateImageBuilder,

    -- * Request Lenses
    createImageBuilder_accessEndpoints,
    createImageBuilder_appstreamAgentVersion,
    createImageBuilder_description,
    createImageBuilder_displayName,
    createImageBuilder_domainJoinInfo,
    createImageBuilder_enableDefaultInternetAccess,
    createImageBuilder_iamRoleArn,
    createImageBuilder_imageArn,
    createImageBuilder_imageName,
    createImageBuilder_tags,
    createImageBuilder_vpcConfig,
    createImageBuilder_name,
    createImageBuilder_instanceType,

    -- * Destructuring the Response
    CreateImageBuilderResponse (..),
    newCreateImageBuilderResponse,

    -- * Response Lenses
    createImageBuilderResponse_imageBuilder,
    createImageBuilderResponse_httpStatus,
  )
where

import Amazonka.AppStream.Types
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

-- | /See:/ 'newCreateImageBuilder' smart constructor.
data CreateImageBuilder = CreateImageBuilder'
  { -- | The list of interface VPC endpoint (interface endpoint) objects.
    -- Administrators can connect to the image builder only through the
    -- specified endpoints.
    CreateImageBuilder -> Maybe (NonEmpty AccessEndpoint)
accessEndpoints :: Prelude.Maybe (Prelude.NonEmpty AccessEndpoint),
    -- | The version of the AppStream 2.0 agent to use for this image builder. To
    -- use the latest version of the AppStream 2.0 agent, specify [LATEST].
    CreateImageBuilder -> Maybe Text
appstreamAgentVersion :: Prelude.Maybe Prelude.Text,
    -- | The description to display.
    CreateImageBuilder -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The image builder name to display.
    CreateImageBuilder -> Maybe Text
displayName :: Prelude.Maybe Prelude.Text,
    -- | The name of the directory and organizational unit (OU) to use to join
    -- the image builder to a Microsoft Active Directory domain.
    CreateImageBuilder -> Maybe DomainJoinInfo
domainJoinInfo :: Prelude.Maybe DomainJoinInfo,
    -- | Enables or disables default internet access for the image builder.
    CreateImageBuilder -> Maybe Bool
enableDefaultInternetAccess :: Prelude.Maybe Prelude.Bool,
    -- | The Amazon Resource Name (ARN) of the IAM role to apply to the image
    -- builder. To assume a role, the image builder calls the AWS Security
    -- Token Service (STS) @AssumeRole@ API operation and passes the ARN of the
    -- role to use. The operation creates a new session with temporary
    -- credentials. AppStream 2.0 retrieves the temporary credentials and
    -- creates the __appstream_machine_role__ credential profile on the
    -- instance.
    --
    -- For more information, see
    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
    -- in the /Amazon AppStream 2.0 Administration Guide/.
    CreateImageBuilder -> Maybe Text
iamRoleArn :: Prelude.Maybe Prelude.Text,
    -- | The ARN of the public, private, or shared image to use.
    CreateImageBuilder -> Maybe Text
imageArn :: Prelude.Maybe Prelude.Text,
    -- | The name of the image used to create the image builder.
    CreateImageBuilder -> Maybe Text
imageName :: Prelude.Maybe Prelude.Text,
    -- | The tags to associate with the image builder. A tag is a key-value pair,
    -- and the value is optional. For example, Environment=Test. If you do not
    -- specify a value, Environment=.
    --
    -- Generally allowed characters are: letters, numbers, and spaces
    -- representable in UTF-8, and the following special characters:
    --
    -- _ . : \/ = + \\ - \@
    --
    -- If you do not specify a value, the value is set to an empty string.
    --
    -- For more information about tags, see
    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
    -- in the /Amazon AppStream 2.0 Administration Guide/.
    CreateImageBuilder -> Maybe (HashMap Text Text)
tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The VPC configuration for the image builder. You can specify only one
    -- subnet.
    CreateImageBuilder -> Maybe VpcConfig
vpcConfig :: Prelude.Maybe VpcConfig,
    -- | A unique name for the image builder.
    CreateImageBuilder -> Text
name :: Prelude.Text,
    -- | The instance type to use when launching the image builder. The following
    -- instance types are available:
    --
    -- -   stream.standard.small
    --
    -- -   stream.standard.medium
    --
    -- -   stream.standard.large
    --
    -- -   stream.compute.large
    --
    -- -   stream.compute.xlarge
    --
    -- -   stream.compute.2xlarge
    --
    -- -   stream.compute.4xlarge
    --
    -- -   stream.compute.8xlarge
    --
    -- -   stream.memory.large
    --
    -- -   stream.memory.xlarge
    --
    -- -   stream.memory.2xlarge
    --
    -- -   stream.memory.4xlarge
    --
    -- -   stream.memory.8xlarge
    --
    -- -   stream.memory.z1d.large
    --
    -- -   stream.memory.z1d.xlarge
    --
    -- -   stream.memory.z1d.2xlarge
    --
    -- -   stream.memory.z1d.3xlarge
    --
    -- -   stream.memory.z1d.6xlarge
    --
    -- -   stream.memory.z1d.12xlarge
    --
    -- -   stream.graphics-design.large
    --
    -- -   stream.graphics-design.xlarge
    --
    -- -   stream.graphics-design.2xlarge
    --
    -- -   stream.graphics-design.4xlarge
    --
    -- -   stream.graphics-desktop.2xlarge
    --
    -- -   stream.graphics.g4dn.xlarge
    --
    -- -   stream.graphics.g4dn.2xlarge
    --
    -- -   stream.graphics.g4dn.4xlarge
    --
    -- -   stream.graphics.g4dn.8xlarge
    --
    -- -   stream.graphics.g4dn.12xlarge
    --
    -- -   stream.graphics.g4dn.16xlarge
    --
    -- -   stream.graphics-pro.4xlarge
    --
    -- -   stream.graphics-pro.8xlarge
    --
    -- -   stream.graphics-pro.16xlarge
    CreateImageBuilder -> Text
instanceType :: Prelude.Text
  }
  deriving (CreateImageBuilder -> CreateImageBuilder -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateImageBuilder -> CreateImageBuilder -> Bool
$c/= :: CreateImageBuilder -> CreateImageBuilder -> Bool
== :: CreateImageBuilder -> CreateImageBuilder -> Bool
$c== :: CreateImageBuilder -> CreateImageBuilder -> Bool
Prelude.Eq, ReadPrec [CreateImageBuilder]
ReadPrec CreateImageBuilder
Int -> ReadS CreateImageBuilder
ReadS [CreateImageBuilder]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateImageBuilder]
$creadListPrec :: ReadPrec [CreateImageBuilder]
readPrec :: ReadPrec CreateImageBuilder
$creadPrec :: ReadPrec CreateImageBuilder
readList :: ReadS [CreateImageBuilder]
$creadList :: ReadS [CreateImageBuilder]
readsPrec :: Int -> ReadS CreateImageBuilder
$creadsPrec :: Int -> ReadS CreateImageBuilder
Prelude.Read, Int -> CreateImageBuilder -> ShowS
[CreateImageBuilder] -> ShowS
CreateImageBuilder -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateImageBuilder] -> ShowS
$cshowList :: [CreateImageBuilder] -> ShowS
show :: CreateImageBuilder -> String
$cshow :: CreateImageBuilder -> String
showsPrec :: Int -> CreateImageBuilder -> ShowS
$cshowsPrec :: Int -> CreateImageBuilder -> ShowS
Prelude.Show, forall x. Rep CreateImageBuilder x -> CreateImageBuilder
forall x. CreateImageBuilder -> Rep CreateImageBuilder x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateImageBuilder x -> CreateImageBuilder
$cfrom :: forall x. CreateImageBuilder -> Rep CreateImageBuilder x
Prelude.Generic)

-- |
-- Create a value of 'CreateImageBuilder' 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:
--
-- 'accessEndpoints', 'createImageBuilder_accessEndpoints' - The list of interface VPC endpoint (interface endpoint) objects.
-- Administrators can connect to the image builder only through the
-- specified endpoints.
--
-- 'appstreamAgentVersion', 'createImageBuilder_appstreamAgentVersion' - The version of the AppStream 2.0 agent to use for this image builder. To
-- use the latest version of the AppStream 2.0 agent, specify [LATEST].
--
-- 'description', 'createImageBuilder_description' - The description to display.
--
-- 'displayName', 'createImageBuilder_displayName' - The image builder name to display.
--
-- 'domainJoinInfo', 'createImageBuilder_domainJoinInfo' - The name of the directory and organizational unit (OU) to use to join
-- the image builder to a Microsoft Active Directory domain.
--
-- 'enableDefaultInternetAccess', 'createImageBuilder_enableDefaultInternetAccess' - Enables or disables default internet access for the image builder.
--
-- 'iamRoleArn', 'createImageBuilder_iamRoleArn' - The Amazon Resource Name (ARN) of the IAM role to apply to the image
-- builder. To assume a role, the image builder calls the AWS Security
-- Token Service (STS) @AssumeRole@ API operation and passes the ARN of the
-- role to use. The operation creates a new session with temporary
-- credentials. AppStream 2.0 retrieves the temporary credentials and
-- creates the __appstream_machine_role__ credential profile on the
-- instance.
--
-- For more information, see
-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
-- in the /Amazon AppStream 2.0 Administration Guide/.
--
-- 'imageArn', 'createImageBuilder_imageArn' - The ARN of the public, private, or shared image to use.
--
-- 'imageName', 'createImageBuilder_imageName' - The name of the image used to create the image builder.
--
-- 'tags', 'createImageBuilder_tags' - The tags to associate with the image builder. A tag is a key-value pair,
-- and the value is optional. For example, Environment=Test. If you do not
-- specify a value, Environment=.
--
-- Generally allowed characters are: letters, numbers, and spaces
-- representable in UTF-8, and the following special characters:
--
-- _ . : \/ = + \\ - \@
--
-- If you do not specify a value, the value is set to an empty string.
--
-- For more information about tags, see
-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
-- in the /Amazon AppStream 2.0 Administration Guide/.
--
-- 'vpcConfig', 'createImageBuilder_vpcConfig' - The VPC configuration for the image builder. You can specify only one
-- subnet.
--
-- 'name', 'createImageBuilder_name' - A unique name for the image builder.
--
-- 'instanceType', 'createImageBuilder_instanceType' - The instance type to use when launching the image builder. The following
-- instance types are available:
--
-- -   stream.standard.small
--
-- -   stream.standard.medium
--
-- -   stream.standard.large
--
-- -   stream.compute.large
--
-- -   stream.compute.xlarge
--
-- -   stream.compute.2xlarge
--
-- -   stream.compute.4xlarge
--
-- -   stream.compute.8xlarge
--
-- -   stream.memory.large
--
-- -   stream.memory.xlarge
--
-- -   stream.memory.2xlarge
--
-- -   stream.memory.4xlarge
--
-- -   stream.memory.8xlarge
--
-- -   stream.memory.z1d.large
--
-- -   stream.memory.z1d.xlarge
--
-- -   stream.memory.z1d.2xlarge
--
-- -   stream.memory.z1d.3xlarge
--
-- -   stream.memory.z1d.6xlarge
--
-- -   stream.memory.z1d.12xlarge
--
-- -   stream.graphics-design.large
--
-- -   stream.graphics-design.xlarge
--
-- -   stream.graphics-design.2xlarge
--
-- -   stream.graphics-design.4xlarge
--
-- -   stream.graphics-desktop.2xlarge
--
-- -   stream.graphics.g4dn.xlarge
--
-- -   stream.graphics.g4dn.2xlarge
--
-- -   stream.graphics.g4dn.4xlarge
--
-- -   stream.graphics.g4dn.8xlarge
--
-- -   stream.graphics.g4dn.12xlarge
--
-- -   stream.graphics.g4dn.16xlarge
--
-- -   stream.graphics-pro.4xlarge
--
-- -   stream.graphics-pro.8xlarge
--
-- -   stream.graphics-pro.16xlarge
newCreateImageBuilder ::
  -- | 'name'
  Prelude.Text ->
  -- | 'instanceType'
  Prelude.Text ->
  CreateImageBuilder
newCreateImageBuilder :: Text -> Text -> CreateImageBuilder
newCreateImageBuilder Text
pName_ Text
pInstanceType_ =
  CreateImageBuilder'
    { $sel:accessEndpoints:CreateImageBuilder' :: Maybe (NonEmpty AccessEndpoint)
accessEndpoints =
        forall a. Maybe a
Prelude.Nothing,
      $sel:appstreamAgentVersion:CreateImageBuilder' :: Maybe Text
appstreamAgentVersion = forall a. Maybe a
Prelude.Nothing,
      $sel:description:CreateImageBuilder' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:displayName:CreateImageBuilder' :: Maybe Text
displayName = forall a. Maybe a
Prelude.Nothing,
      $sel:domainJoinInfo:CreateImageBuilder' :: Maybe DomainJoinInfo
domainJoinInfo = forall a. Maybe a
Prelude.Nothing,
      $sel:enableDefaultInternetAccess:CreateImageBuilder' :: Maybe Bool
enableDefaultInternetAccess = forall a. Maybe a
Prelude.Nothing,
      $sel:iamRoleArn:CreateImageBuilder' :: Maybe Text
iamRoleArn = forall a. Maybe a
Prelude.Nothing,
      $sel:imageArn:CreateImageBuilder' :: Maybe Text
imageArn = forall a. Maybe a
Prelude.Nothing,
      $sel:imageName:CreateImageBuilder' :: Maybe Text
imageName = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateImageBuilder' :: Maybe (HashMap Text Text)
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:vpcConfig:CreateImageBuilder' :: Maybe VpcConfig
vpcConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:name:CreateImageBuilder' :: Text
name = Text
pName_,
      $sel:instanceType:CreateImageBuilder' :: Text
instanceType = Text
pInstanceType_
    }

-- | The list of interface VPC endpoint (interface endpoint) objects.
-- Administrators can connect to the image builder only through the
-- specified endpoints.
createImageBuilder_accessEndpoints :: Lens.Lens' CreateImageBuilder (Prelude.Maybe (Prelude.NonEmpty AccessEndpoint))
createImageBuilder_accessEndpoints :: Lens' CreateImageBuilder (Maybe (NonEmpty AccessEndpoint))
createImageBuilder_accessEndpoints = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Maybe (NonEmpty AccessEndpoint)
accessEndpoints :: Maybe (NonEmpty AccessEndpoint)
$sel:accessEndpoints:CreateImageBuilder' :: CreateImageBuilder -> Maybe (NonEmpty AccessEndpoint)
accessEndpoints} -> Maybe (NonEmpty AccessEndpoint)
accessEndpoints) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Maybe (NonEmpty AccessEndpoint)
a -> CreateImageBuilder
s {$sel:accessEndpoints:CreateImageBuilder' :: Maybe (NonEmpty AccessEndpoint)
accessEndpoints = Maybe (NonEmpty AccessEndpoint)
a} :: CreateImageBuilder) 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 version of the AppStream 2.0 agent to use for this image builder. To
-- use the latest version of the AppStream 2.0 agent, specify [LATEST].
createImageBuilder_appstreamAgentVersion :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
createImageBuilder_appstreamAgentVersion :: Lens' CreateImageBuilder (Maybe Text)
createImageBuilder_appstreamAgentVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Maybe Text
appstreamAgentVersion :: Maybe Text
$sel:appstreamAgentVersion:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
appstreamAgentVersion} -> Maybe Text
appstreamAgentVersion) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Maybe Text
a -> CreateImageBuilder
s {$sel:appstreamAgentVersion:CreateImageBuilder' :: Maybe Text
appstreamAgentVersion = Maybe Text
a} :: CreateImageBuilder)

-- | The description to display.
createImageBuilder_description :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
createImageBuilder_description :: Lens' CreateImageBuilder (Maybe Text)
createImageBuilder_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Maybe Text
description :: Maybe Text
$sel:description:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
description} -> Maybe Text
description) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Maybe Text
a -> CreateImageBuilder
s {$sel:description:CreateImageBuilder' :: Maybe Text
description = Maybe Text
a} :: CreateImageBuilder)

-- | The image builder name to display.
createImageBuilder_displayName :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
createImageBuilder_displayName :: Lens' CreateImageBuilder (Maybe Text)
createImageBuilder_displayName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Maybe Text
displayName :: Maybe Text
$sel:displayName:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
displayName} -> Maybe Text
displayName) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Maybe Text
a -> CreateImageBuilder
s {$sel:displayName:CreateImageBuilder' :: Maybe Text
displayName = Maybe Text
a} :: CreateImageBuilder)

-- | The name of the directory and organizational unit (OU) to use to join
-- the image builder to a Microsoft Active Directory domain.
createImageBuilder_domainJoinInfo :: Lens.Lens' CreateImageBuilder (Prelude.Maybe DomainJoinInfo)
createImageBuilder_domainJoinInfo :: Lens' CreateImageBuilder (Maybe DomainJoinInfo)
createImageBuilder_domainJoinInfo = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Maybe DomainJoinInfo
domainJoinInfo :: Maybe DomainJoinInfo
$sel:domainJoinInfo:CreateImageBuilder' :: CreateImageBuilder -> Maybe DomainJoinInfo
domainJoinInfo} -> Maybe DomainJoinInfo
domainJoinInfo) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Maybe DomainJoinInfo
a -> CreateImageBuilder
s {$sel:domainJoinInfo:CreateImageBuilder' :: Maybe DomainJoinInfo
domainJoinInfo = Maybe DomainJoinInfo
a} :: CreateImageBuilder)

-- | Enables or disables default internet access for the image builder.
createImageBuilder_enableDefaultInternetAccess :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Bool)
createImageBuilder_enableDefaultInternetAccess :: Lens' CreateImageBuilder (Maybe Bool)
createImageBuilder_enableDefaultInternetAccess = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Maybe Bool
enableDefaultInternetAccess :: Maybe Bool
$sel:enableDefaultInternetAccess:CreateImageBuilder' :: CreateImageBuilder -> Maybe Bool
enableDefaultInternetAccess} -> Maybe Bool
enableDefaultInternetAccess) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Maybe Bool
a -> CreateImageBuilder
s {$sel:enableDefaultInternetAccess:CreateImageBuilder' :: Maybe Bool
enableDefaultInternetAccess = Maybe Bool
a} :: CreateImageBuilder)

-- | The Amazon Resource Name (ARN) of the IAM role to apply to the image
-- builder. To assume a role, the image builder calls the AWS Security
-- Token Service (STS) @AssumeRole@ API operation and passes the ARN of the
-- role to use. The operation creates a new session with temporary
-- credentials. AppStream 2.0 retrieves the temporary credentials and
-- creates the __appstream_machine_role__ credential profile on the
-- instance.
--
-- For more information, see
-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
-- in the /Amazon AppStream 2.0 Administration Guide/.
createImageBuilder_iamRoleArn :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
createImageBuilder_iamRoleArn :: Lens' CreateImageBuilder (Maybe Text)
createImageBuilder_iamRoleArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Maybe Text
iamRoleArn :: Maybe Text
$sel:iamRoleArn:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
iamRoleArn} -> Maybe Text
iamRoleArn) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Maybe Text
a -> CreateImageBuilder
s {$sel:iamRoleArn:CreateImageBuilder' :: Maybe Text
iamRoleArn = Maybe Text
a} :: CreateImageBuilder)

-- | The ARN of the public, private, or shared image to use.
createImageBuilder_imageArn :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
createImageBuilder_imageArn :: Lens' CreateImageBuilder (Maybe Text)
createImageBuilder_imageArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Maybe Text
imageArn :: Maybe Text
$sel:imageArn:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
imageArn} -> Maybe Text
imageArn) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Maybe Text
a -> CreateImageBuilder
s {$sel:imageArn:CreateImageBuilder' :: Maybe Text
imageArn = Maybe Text
a} :: CreateImageBuilder)

-- | The name of the image used to create the image builder.
createImageBuilder_imageName :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
createImageBuilder_imageName :: Lens' CreateImageBuilder (Maybe Text)
createImageBuilder_imageName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Maybe Text
imageName :: Maybe Text
$sel:imageName:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
imageName} -> Maybe Text
imageName) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Maybe Text
a -> CreateImageBuilder
s {$sel:imageName:CreateImageBuilder' :: Maybe Text
imageName = Maybe Text
a} :: CreateImageBuilder)

-- | The tags to associate with the image builder. A tag is a key-value pair,
-- and the value is optional. For example, Environment=Test. If you do not
-- specify a value, Environment=.
--
-- Generally allowed characters are: letters, numbers, and spaces
-- representable in UTF-8, and the following special characters:
--
-- _ . : \/ = + \\ - \@
--
-- If you do not specify a value, the value is set to an empty string.
--
-- For more information about tags, see
-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
-- in the /Amazon AppStream 2.0 Administration Guide/.
createImageBuilder_tags :: Lens.Lens' CreateImageBuilder (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createImageBuilder_tags :: Lens' CreateImageBuilder (Maybe (HashMap Text Text))
createImageBuilder_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Maybe (HashMap Text Text)
tags :: Maybe (HashMap Text Text)
$sel:tags:CreateImageBuilder' :: CreateImageBuilder -> Maybe (HashMap Text Text)
tags} -> Maybe (HashMap Text Text)
tags) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Maybe (HashMap Text Text)
a -> CreateImageBuilder
s {$sel:tags:CreateImageBuilder' :: Maybe (HashMap Text Text)
tags = Maybe (HashMap Text Text)
a} :: CreateImageBuilder) 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 VPC configuration for the image builder. You can specify only one
-- subnet.
createImageBuilder_vpcConfig :: Lens.Lens' CreateImageBuilder (Prelude.Maybe VpcConfig)
createImageBuilder_vpcConfig :: Lens' CreateImageBuilder (Maybe VpcConfig)
createImageBuilder_vpcConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Maybe VpcConfig
vpcConfig :: Maybe VpcConfig
$sel:vpcConfig:CreateImageBuilder' :: CreateImageBuilder -> Maybe VpcConfig
vpcConfig} -> Maybe VpcConfig
vpcConfig) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Maybe VpcConfig
a -> CreateImageBuilder
s {$sel:vpcConfig:CreateImageBuilder' :: Maybe VpcConfig
vpcConfig = Maybe VpcConfig
a} :: CreateImageBuilder)

-- | A unique name for the image builder.
createImageBuilder_name :: Lens.Lens' CreateImageBuilder Prelude.Text
createImageBuilder_name :: Lens' CreateImageBuilder Text
createImageBuilder_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Text
name :: Text
$sel:name:CreateImageBuilder' :: CreateImageBuilder -> Text
name} -> Text
name) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Text
a -> CreateImageBuilder
s {$sel:name:CreateImageBuilder' :: Text
name = Text
a} :: CreateImageBuilder)

-- | The instance type to use when launching the image builder. The following
-- instance types are available:
--
-- -   stream.standard.small
--
-- -   stream.standard.medium
--
-- -   stream.standard.large
--
-- -   stream.compute.large
--
-- -   stream.compute.xlarge
--
-- -   stream.compute.2xlarge
--
-- -   stream.compute.4xlarge
--
-- -   stream.compute.8xlarge
--
-- -   stream.memory.large
--
-- -   stream.memory.xlarge
--
-- -   stream.memory.2xlarge
--
-- -   stream.memory.4xlarge
--
-- -   stream.memory.8xlarge
--
-- -   stream.memory.z1d.large
--
-- -   stream.memory.z1d.xlarge
--
-- -   stream.memory.z1d.2xlarge
--
-- -   stream.memory.z1d.3xlarge
--
-- -   stream.memory.z1d.6xlarge
--
-- -   stream.memory.z1d.12xlarge
--
-- -   stream.graphics-design.large
--
-- -   stream.graphics-design.xlarge
--
-- -   stream.graphics-design.2xlarge
--
-- -   stream.graphics-design.4xlarge
--
-- -   stream.graphics-desktop.2xlarge
--
-- -   stream.graphics.g4dn.xlarge
--
-- -   stream.graphics.g4dn.2xlarge
--
-- -   stream.graphics.g4dn.4xlarge
--
-- -   stream.graphics.g4dn.8xlarge
--
-- -   stream.graphics.g4dn.12xlarge
--
-- -   stream.graphics.g4dn.16xlarge
--
-- -   stream.graphics-pro.4xlarge
--
-- -   stream.graphics-pro.8xlarge
--
-- -   stream.graphics-pro.16xlarge
createImageBuilder_instanceType :: Lens.Lens' CreateImageBuilder Prelude.Text
createImageBuilder_instanceType :: Lens' CreateImageBuilder Text
createImageBuilder_instanceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilder' {Text
instanceType :: Text
$sel:instanceType:CreateImageBuilder' :: CreateImageBuilder -> Text
instanceType} -> Text
instanceType) (\s :: CreateImageBuilder
s@CreateImageBuilder' {} Text
a -> CreateImageBuilder
s {$sel:instanceType:CreateImageBuilder' :: Text
instanceType = Text
a} :: CreateImageBuilder)

instance Core.AWSRequest CreateImageBuilder where
  type
    AWSResponse CreateImageBuilder =
      CreateImageBuilderResponse
  request :: (Service -> Service)
-> CreateImageBuilder -> Request CreateImageBuilder
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 CreateImageBuilder
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateImageBuilder)))
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 ImageBuilder -> Int -> CreateImageBuilderResponse
CreateImageBuilderResponse'
            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
"ImageBuilder")
            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 CreateImageBuilder where
  hashWithSalt :: Int -> CreateImageBuilder -> Int
hashWithSalt Int
_salt CreateImageBuilder' {Maybe Bool
Maybe (NonEmpty AccessEndpoint)
Maybe Text
Maybe (HashMap Text Text)
Maybe DomainJoinInfo
Maybe VpcConfig
Text
instanceType :: Text
name :: Text
vpcConfig :: Maybe VpcConfig
tags :: Maybe (HashMap Text Text)
imageName :: Maybe Text
imageArn :: Maybe Text
iamRoleArn :: Maybe Text
enableDefaultInternetAccess :: Maybe Bool
domainJoinInfo :: Maybe DomainJoinInfo
displayName :: Maybe Text
description :: Maybe Text
appstreamAgentVersion :: Maybe Text
accessEndpoints :: Maybe (NonEmpty AccessEndpoint)
$sel:instanceType:CreateImageBuilder' :: CreateImageBuilder -> Text
$sel:name:CreateImageBuilder' :: CreateImageBuilder -> Text
$sel:vpcConfig:CreateImageBuilder' :: CreateImageBuilder -> Maybe VpcConfig
$sel:tags:CreateImageBuilder' :: CreateImageBuilder -> Maybe (HashMap Text Text)
$sel:imageName:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:imageArn:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:iamRoleArn:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:enableDefaultInternetAccess:CreateImageBuilder' :: CreateImageBuilder -> Maybe Bool
$sel:domainJoinInfo:CreateImageBuilder' :: CreateImageBuilder -> Maybe DomainJoinInfo
$sel:displayName:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:description:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:appstreamAgentVersion:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:accessEndpoints:CreateImageBuilder' :: CreateImageBuilder -> Maybe (NonEmpty AccessEndpoint)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty AccessEndpoint)
accessEndpoints
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
appstreamAgentVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
displayName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DomainJoinInfo
domainJoinInfo
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
enableDefaultInternetAccess
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
iamRoleArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
imageArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
imageName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VpcConfig
vpcConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
instanceType

instance Prelude.NFData CreateImageBuilder where
  rnf :: CreateImageBuilder -> ()
rnf CreateImageBuilder' {Maybe Bool
Maybe (NonEmpty AccessEndpoint)
Maybe Text
Maybe (HashMap Text Text)
Maybe DomainJoinInfo
Maybe VpcConfig
Text
instanceType :: Text
name :: Text
vpcConfig :: Maybe VpcConfig
tags :: Maybe (HashMap Text Text)
imageName :: Maybe Text
imageArn :: Maybe Text
iamRoleArn :: Maybe Text
enableDefaultInternetAccess :: Maybe Bool
domainJoinInfo :: Maybe DomainJoinInfo
displayName :: Maybe Text
description :: Maybe Text
appstreamAgentVersion :: Maybe Text
accessEndpoints :: Maybe (NonEmpty AccessEndpoint)
$sel:instanceType:CreateImageBuilder' :: CreateImageBuilder -> Text
$sel:name:CreateImageBuilder' :: CreateImageBuilder -> Text
$sel:vpcConfig:CreateImageBuilder' :: CreateImageBuilder -> Maybe VpcConfig
$sel:tags:CreateImageBuilder' :: CreateImageBuilder -> Maybe (HashMap Text Text)
$sel:imageName:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:imageArn:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:iamRoleArn:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:enableDefaultInternetAccess:CreateImageBuilder' :: CreateImageBuilder -> Maybe Bool
$sel:domainJoinInfo:CreateImageBuilder' :: CreateImageBuilder -> Maybe DomainJoinInfo
$sel:displayName:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:description:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:appstreamAgentVersion:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:accessEndpoints:CreateImageBuilder' :: CreateImageBuilder -> Maybe (NonEmpty AccessEndpoint)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty AccessEndpoint)
accessEndpoints
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
appstreamAgentVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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
displayName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DomainJoinInfo
domainJoinInfo
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
enableDefaultInternetAccess
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
iamRoleArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
imageArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
imageName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VpcConfig
vpcConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
instanceType

instance Data.ToHeaders CreateImageBuilder where
  toHeaders :: CreateImageBuilder -> 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
"PhotonAdminProxyService.CreateImageBuilder" ::
                          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 CreateImageBuilder where
  toJSON :: CreateImageBuilder -> Value
toJSON CreateImageBuilder' {Maybe Bool
Maybe (NonEmpty AccessEndpoint)
Maybe Text
Maybe (HashMap Text Text)
Maybe DomainJoinInfo
Maybe VpcConfig
Text
instanceType :: Text
name :: Text
vpcConfig :: Maybe VpcConfig
tags :: Maybe (HashMap Text Text)
imageName :: Maybe Text
imageArn :: Maybe Text
iamRoleArn :: Maybe Text
enableDefaultInternetAccess :: Maybe Bool
domainJoinInfo :: Maybe DomainJoinInfo
displayName :: Maybe Text
description :: Maybe Text
appstreamAgentVersion :: Maybe Text
accessEndpoints :: Maybe (NonEmpty AccessEndpoint)
$sel:instanceType:CreateImageBuilder' :: CreateImageBuilder -> Text
$sel:name:CreateImageBuilder' :: CreateImageBuilder -> Text
$sel:vpcConfig:CreateImageBuilder' :: CreateImageBuilder -> Maybe VpcConfig
$sel:tags:CreateImageBuilder' :: CreateImageBuilder -> Maybe (HashMap Text Text)
$sel:imageName:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:imageArn:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:iamRoleArn:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:enableDefaultInternetAccess:CreateImageBuilder' :: CreateImageBuilder -> Maybe Bool
$sel:domainJoinInfo:CreateImageBuilder' :: CreateImageBuilder -> Maybe DomainJoinInfo
$sel:displayName:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:description:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:appstreamAgentVersion:CreateImageBuilder' :: CreateImageBuilder -> Maybe Text
$sel:accessEndpoints:CreateImageBuilder' :: CreateImageBuilder -> Maybe (NonEmpty AccessEndpoint)
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AccessEndpoints" 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 (NonEmpty AccessEndpoint)
accessEndpoints,
            (Key
"AppstreamAgentVersion" 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
appstreamAgentVersion,
            (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
"DisplayName" 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
displayName,
            (Key
"DomainJoinInfo" 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 DomainJoinInfo
domainJoinInfo,
            (Key
"EnableDefaultInternetAccess" 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 Bool
enableDefaultInternetAccess,
            (Key
"IamRoleArn" 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
iamRoleArn,
            (Key
"ImageArn" 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
imageArn,
            (Key
"ImageName" 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
imageName,
            (Key
"Tags" 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 (HashMap Text Text)
tags,
            (Key
"VpcConfig" 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 VpcConfig
vpcConfig,
            forall a. a -> Maybe a
Prelude.Just (Key
"Name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
name),
            forall a. a -> Maybe a
Prelude.Just (Key
"InstanceType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
instanceType)
          ]
      )

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

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

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

-- |
-- Create a value of 'CreateImageBuilderResponse' 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:
--
-- 'imageBuilder', 'createImageBuilderResponse_imageBuilder' - Information about the image builder.
--
-- 'httpStatus', 'createImageBuilderResponse_httpStatus' - The response's http status code.
newCreateImageBuilderResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateImageBuilderResponse
newCreateImageBuilderResponse :: Int -> CreateImageBuilderResponse
newCreateImageBuilderResponse Int
pHttpStatus_ =
  CreateImageBuilderResponse'
    { $sel:imageBuilder:CreateImageBuilderResponse' :: Maybe ImageBuilder
imageBuilder =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateImageBuilderResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Information about the image builder.
createImageBuilderResponse_imageBuilder :: Lens.Lens' CreateImageBuilderResponse (Prelude.Maybe ImageBuilder)
createImageBuilderResponse_imageBuilder :: Lens' CreateImageBuilderResponse (Maybe ImageBuilder)
createImageBuilderResponse_imageBuilder = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateImageBuilderResponse' {Maybe ImageBuilder
imageBuilder :: Maybe ImageBuilder
$sel:imageBuilder:CreateImageBuilderResponse' :: CreateImageBuilderResponse -> Maybe ImageBuilder
imageBuilder} -> Maybe ImageBuilder
imageBuilder) (\s :: CreateImageBuilderResponse
s@CreateImageBuilderResponse' {} Maybe ImageBuilder
a -> CreateImageBuilderResponse
s {$sel:imageBuilder:CreateImageBuilderResponse' :: Maybe ImageBuilder
imageBuilder = Maybe ImageBuilder
a} :: CreateImageBuilderResponse)

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

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