{-# 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.Connect.CreateInstance
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- This API is in preview release for Amazon Connect and is subject to
-- change.
--
-- Initiates an Amazon Connect instance with all the supported channels
-- enabled. It does not attach any storage, such as Amazon Simple Storage
-- Service (Amazon S3) or Amazon Kinesis. It also does not allow for any
-- configurations on features, such as Contact Lens for Amazon Connect.
--
-- Amazon Connect enforces a limit on the total number of instances that
-- you can create or delete in 30 days. If you exceed this limit, you will
-- get an error message indicating there has been an excessive number of
-- attempts at creating or deleting instances. You must wait 30 days before
-- you can restart creating and deleting instances in your account.
module Amazonka.Connect.CreateInstance
  ( -- * Creating a Request
    CreateInstance (..),
    newCreateInstance,

    -- * Request Lenses
    createInstance_clientToken,
    createInstance_directoryId,
    createInstance_instanceAlias,
    createInstance_identityManagementType,
    createInstance_inboundCallsEnabled,
    createInstance_outboundCallsEnabled,

    -- * Destructuring the Response
    CreateInstanceResponse (..),
    newCreateInstanceResponse,

    -- * Response Lenses
    createInstanceResponse_arn,
    createInstanceResponse_id,
    createInstanceResponse_httpStatus,
  )
where

import Amazonka.Connect.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:/ 'newCreateInstance' smart constructor.
data CreateInstance = CreateInstance'
  { -- | The idempotency token.
    CreateInstance -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | The identifier for the directory.
    CreateInstance -> Maybe Text
directoryId :: Prelude.Maybe Prelude.Text,
    -- | The name for your instance.
    CreateInstance -> Maybe (Sensitive Text)
instanceAlias :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The type of identity management for your Amazon Connect users.
    CreateInstance -> DirectoryType
identityManagementType :: DirectoryType,
    -- | Your contact center handles incoming contacts.
    CreateInstance -> Bool
inboundCallsEnabled :: Prelude.Bool,
    -- | Your contact center allows outbound calls.
    CreateInstance -> Bool
outboundCallsEnabled :: Prelude.Bool
  }
  deriving (CreateInstance -> CreateInstance -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateInstance -> CreateInstance -> Bool
$c/= :: CreateInstance -> CreateInstance -> Bool
== :: CreateInstance -> CreateInstance -> Bool
$c== :: CreateInstance -> CreateInstance -> Bool
Prelude.Eq, Int -> CreateInstance -> ShowS
[CreateInstance] -> ShowS
CreateInstance -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateInstance] -> ShowS
$cshowList :: [CreateInstance] -> ShowS
show :: CreateInstance -> String
$cshow :: CreateInstance -> String
showsPrec :: Int -> CreateInstance -> ShowS
$cshowsPrec :: Int -> CreateInstance -> ShowS
Prelude.Show, forall x. Rep CreateInstance x -> CreateInstance
forall x. CreateInstance -> Rep CreateInstance x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateInstance x -> CreateInstance
$cfrom :: forall x. CreateInstance -> Rep CreateInstance x
Prelude.Generic)

-- |
-- Create a value of 'CreateInstance' 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:
--
-- 'clientToken', 'createInstance_clientToken' - The idempotency token.
--
-- 'directoryId', 'createInstance_directoryId' - The identifier for the directory.
--
-- 'instanceAlias', 'createInstance_instanceAlias' - The name for your instance.
--
-- 'identityManagementType', 'createInstance_identityManagementType' - The type of identity management for your Amazon Connect users.
--
-- 'inboundCallsEnabled', 'createInstance_inboundCallsEnabled' - Your contact center handles incoming contacts.
--
-- 'outboundCallsEnabled', 'createInstance_outboundCallsEnabled' - Your contact center allows outbound calls.
newCreateInstance ::
  -- | 'identityManagementType'
  DirectoryType ->
  -- | 'inboundCallsEnabled'
  Prelude.Bool ->
  -- | 'outboundCallsEnabled'
  Prelude.Bool ->
  CreateInstance
newCreateInstance :: DirectoryType -> Bool -> Bool -> CreateInstance
newCreateInstance
  DirectoryType
pIdentityManagementType_
  Bool
pInboundCallsEnabled_
  Bool
pOutboundCallsEnabled_ =
    CreateInstance'
      { $sel:clientToken:CreateInstance' :: Maybe Text
clientToken = forall a. Maybe a
Prelude.Nothing,
        $sel:directoryId:CreateInstance' :: Maybe Text
directoryId = forall a. Maybe a
Prelude.Nothing,
        $sel:instanceAlias:CreateInstance' :: Maybe (Sensitive Text)
instanceAlias = forall a. Maybe a
Prelude.Nothing,
        $sel:identityManagementType:CreateInstance' :: DirectoryType
identityManagementType = DirectoryType
pIdentityManagementType_,
        $sel:inboundCallsEnabled:CreateInstance' :: Bool
inboundCallsEnabled = Bool
pInboundCallsEnabled_,
        $sel:outboundCallsEnabled:CreateInstance' :: Bool
outboundCallsEnabled = Bool
pOutboundCallsEnabled_
      }

-- | The idempotency token.
createInstance_clientToken :: Lens.Lens' CreateInstance (Prelude.Maybe Prelude.Text)
createInstance_clientToken :: Lens' CreateInstance (Maybe Text)
createInstance_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInstance' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:CreateInstance' :: CreateInstance -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: CreateInstance
s@CreateInstance' {} Maybe Text
a -> CreateInstance
s {$sel:clientToken:CreateInstance' :: Maybe Text
clientToken = Maybe Text
a} :: CreateInstance)

-- | The identifier for the directory.
createInstance_directoryId :: Lens.Lens' CreateInstance (Prelude.Maybe Prelude.Text)
createInstance_directoryId :: Lens' CreateInstance (Maybe Text)
createInstance_directoryId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInstance' {Maybe Text
directoryId :: Maybe Text
$sel:directoryId:CreateInstance' :: CreateInstance -> Maybe Text
directoryId} -> Maybe Text
directoryId) (\s :: CreateInstance
s@CreateInstance' {} Maybe Text
a -> CreateInstance
s {$sel:directoryId:CreateInstance' :: Maybe Text
directoryId = Maybe Text
a} :: CreateInstance)

-- | The name for your instance.
createInstance_instanceAlias :: Lens.Lens' CreateInstance (Prelude.Maybe Prelude.Text)
createInstance_instanceAlias :: Lens' CreateInstance (Maybe Text)
createInstance_instanceAlias = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInstance' {Maybe (Sensitive Text)
instanceAlias :: Maybe (Sensitive Text)
$sel:instanceAlias:CreateInstance' :: CreateInstance -> Maybe (Sensitive Text)
instanceAlias} -> Maybe (Sensitive Text)
instanceAlias) (\s :: CreateInstance
s@CreateInstance' {} Maybe (Sensitive Text)
a -> CreateInstance
s {$sel:instanceAlias:CreateInstance' :: Maybe (Sensitive Text)
instanceAlias = Maybe (Sensitive Text)
a} :: CreateInstance) 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 a. Iso' (Sensitive a) a
Data._Sensitive

-- | The type of identity management for your Amazon Connect users.
createInstance_identityManagementType :: Lens.Lens' CreateInstance DirectoryType
createInstance_identityManagementType :: Lens' CreateInstance DirectoryType
createInstance_identityManagementType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInstance' {DirectoryType
identityManagementType :: DirectoryType
$sel:identityManagementType:CreateInstance' :: CreateInstance -> DirectoryType
identityManagementType} -> DirectoryType
identityManagementType) (\s :: CreateInstance
s@CreateInstance' {} DirectoryType
a -> CreateInstance
s {$sel:identityManagementType:CreateInstance' :: DirectoryType
identityManagementType = DirectoryType
a} :: CreateInstance)

-- | Your contact center handles incoming contacts.
createInstance_inboundCallsEnabled :: Lens.Lens' CreateInstance Prelude.Bool
createInstance_inboundCallsEnabled :: Lens' CreateInstance Bool
createInstance_inboundCallsEnabled = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInstance' {Bool
inboundCallsEnabled :: Bool
$sel:inboundCallsEnabled:CreateInstance' :: CreateInstance -> Bool
inboundCallsEnabled} -> Bool
inboundCallsEnabled) (\s :: CreateInstance
s@CreateInstance' {} Bool
a -> CreateInstance
s {$sel:inboundCallsEnabled:CreateInstance' :: Bool
inboundCallsEnabled = Bool
a} :: CreateInstance)

-- | Your contact center allows outbound calls.
createInstance_outboundCallsEnabled :: Lens.Lens' CreateInstance Prelude.Bool
createInstance_outboundCallsEnabled :: Lens' CreateInstance Bool
createInstance_outboundCallsEnabled = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInstance' {Bool
outboundCallsEnabled :: Bool
$sel:outboundCallsEnabled:CreateInstance' :: CreateInstance -> Bool
outboundCallsEnabled} -> Bool
outboundCallsEnabled) (\s :: CreateInstance
s@CreateInstance' {} Bool
a -> CreateInstance
s {$sel:outboundCallsEnabled:CreateInstance' :: Bool
outboundCallsEnabled = Bool
a} :: CreateInstance)

instance Core.AWSRequest CreateInstance where
  type
    AWSResponse CreateInstance =
      CreateInstanceResponse
  request :: (Service -> Service) -> CreateInstance -> Request CreateInstance
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.putJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy CreateInstance
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateInstance)))
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 -> Maybe Text -> Int -> CreateInstanceResponse
CreateInstanceResponse'
            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
"Arn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"Id")
            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 CreateInstance where
  hashWithSalt :: Int -> CreateInstance -> Int
hashWithSalt Int
_salt CreateInstance' {Bool
Maybe Text
Maybe (Sensitive Text)
DirectoryType
outboundCallsEnabled :: Bool
inboundCallsEnabled :: Bool
identityManagementType :: DirectoryType
instanceAlias :: Maybe (Sensitive Text)
directoryId :: Maybe Text
clientToken :: Maybe Text
$sel:outboundCallsEnabled:CreateInstance' :: CreateInstance -> Bool
$sel:inboundCallsEnabled:CreateInstance' :: CreateInstance -> Bool
$sel:identityManagementType:CreateInstance' :: CreateInstance -> DirectoryType
$sel:instanceAlias:CreateInstance' :: CreateInstance -> Maybe (Sensitive Text)
$sel:directoryId:CreateInstance' :: CreateInstance -> Maybe Text
$sel:clientToken:CreateInstance' :: CreateInstance -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
directoryId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
instanceAlias
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DirectoryType
identityManagementType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Bool
inboundCallsEnabled
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Bool
outboundCallsEnabled

instance Prelude.NFData CreateInstance where
  rnf :: CreateInstance -> ()
rnf CreateInstance' {Bool
Maybe Text
Maybe (Sensitive Text)
DirectoryType
outboundCallsEnabled :: Bool
inboundCallsEnabled :: Bool
identityManagementType :: DirectoryType
instanceAlias :: Maybe (Sensitive Text)
directoryId :: Maybe Text
clientToken :: Maybe Text
$sel:outboundCallsEnabled:CreateInstance' :: CreateInstance -> Bool
$sel:inboundCallsEnabled:CreateInstance' :: CreateInstance -> Bool
$sel:identityManagementType:CreateInstance' :: CreateInstance -> DirectoryType
$sel:instanceAlias:CreateInstance' :: CreateInstance -> Maybe (Sensitive Text)
$sel:directoryId:CreateInstance' :: CreateInstance -> Maybe Text
$sel:clientToken:CreateInstance' :: CreateInstance -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
directoryId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
instanceAlias
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DirectoryType
identityManagementType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Bool
inboundCallsEnabled
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Bool
outboundCallsEnabled

instance Data.ToHeaders CreateInstance where
  toHeaders :: CreateInstance -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateInstance where
  toJSON :: CreateInstance -> Value
toJSON CreateInstance' {Bool
Maybe Text
Maybe (Sensitive Text)
DirectoryType
outboundCallsEnabled :: Bool
inboundCallsEnabled :: Bool
identityManagementType :: DirectoryType
instanceAlias :: Maybe (Sensitive Text)
directoryId :: Maybe Text
clientToken :: Maybe Text
$sel:outboundCallsEnabled:CreateInstance' :: CreateInstance -> Bool
$sel:inboundCallsEnabled:CreateInstance' :: CreateInstance -> Bool
$sel:identityManagementType:CreateInstance' :: CreateInstance -> DirectoryType
$sel:instanceAlias:CreateInstance' :: CreateInstance -> Maybe (Sensitive Text)
$sel:directoryId:CreateInstance' :: CreateInstance -> Maybe Text
$sel:clientToken:CreateInstance' :: CreateInstance -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ClientToken" 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
clientToken,
            (Key
"DirectoryId" 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
directoryId,
            (Key
"InstanceAlias" 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 (Sensitive Text)
instanceAlias,
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"IdentityManagementType"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= DirectoryType
identityManagementType
              ),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"InboundCallsEnabled" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Bool
inboundCallsEnabled),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"OutboundCallsEnabled"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Bool
outboundCallsEnabled
              )
          ]
      )

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

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

-- | /See:/ 'newCreateInstanceResponse' smart constructor.
data CreateInstanceResponse = CreateInstanceResponse'
  { -- | The Amazon Resource Name (ARN) of the instance.
    CreateInstanceResponse -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | The identifier for the instance.
    CreateInstanceResponse -> Maybe Text
id :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreateInstanceResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateInstanceResponse -> CreateInstanceResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateInstanceResponse -> CreateInstanceResponse -> Bool
$c/= :: CreateInstanceResponse -> CreateInstanceResponse -> Bool
== :: CreateInstanceResponse -> CreateInstanceResponse -> Bool
$c== :: CreateInstanceResponse -> CreateInstanceResponse -> Bool
Prelude.Eq, ReadPrec [CreateInstanceResponse]
ReadPrec CreateInstanceResponse
Int -> ReadS CreateInstanceResponse
ReadS [CreateInstanceResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateInstanceResponse]
$creadListPrec :: ReadPrec [CreateInstanceResponse]
readPrec :: ReadPrec CreateInstanceResponse
$creadPrec :: ReadPrec CreateInstanceResponse
readList :: ReadS [CreateInstanceResponse]
$creadList :: ReadS [CreateInstanceResponse]
readsPrec :: Int -> ReadS CreateInstanceResponse
$creadsPrec :: Int -> ReadS CreateInstanceResponse
Prelude.Read, Int -> CreateInstanceResponse -> ShowS
[CreateInstanceResponse] -> ShowS
CreateInstanceResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateInstanceResponse] -> ShowS
$cshowList :: [CreateInstanceResponse] -> ShowS
show :: CreateInstanceResponse -> String
$cshow :: CreateInstanceResponse -> String
showsPrec :: Int -> CreateInstanceResponse -> ShowS
$cshowsPrec :: Int -> CreateInstanceResponse -> ShowS
Prelude.Show, forall x. Rep CreateInstanceResponse x -> CreateInstanceResponse
forall x. CreateInstanceResponse -> Rep CreateInstanceResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateInstanceResponse x -> CreateInstanceResponse
$cfrom :: forall x. CreateInstanceResponse -> Rep CreateInstanceResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateInstanceResponse' 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:
--
-- 'arn', 'createInstanceResponse_arn' - The Amazon Resource Name (ARN) of the instance.
--
-- 'id', 'createInstanceResponse_id' - The identifier for the instance.
--
-- 'httpStatus', 'createInstanceResponse_httpStatus' - The response's http status code.
newCreateInstanceResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateInstanceResponse
newCreateInstanceResponse :: Int -> CreateInstanceResponse
newCreateInstanceResponse Int
pHttpStatus_ =
  CreateInstanceResponse'
    { $sel:arn:CreateInstanceResponse' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:id:CreateInstanceResponse' :: Maybe Text
id = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateInstanceResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The Amazon Resource Name (ARN) of the instance.
createInstanceResponse_arn :: Lens.Lens' CreateInstanceResponse (Prelude.Maybe Prelude.Text)
createInstanceResponse_arn :: Lens' CreateInstanceResponse (Maybe Text)
createInstanceResponse_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInstanceResponse' {Maybe Text
arn :: Maybe Text
$sel:arn:CreateInstanceResponse' :: CreateInstanceResponse -> Maybe Text
arn} -> Maybe Text
arn) (\s :: CreateInstanceResponse
s@CreateInstanceResponse' {} Maybe Text
a -> CreateInstanceResponse
s {$sel:arn:CreateInstanceResponse' :: Maybe Text
arn = Maybe Text
a} :: CreateInstanceResponse)

-- | The identifier for the instance.
createInstanceResponse_id :: Lens.Lens' CreateInstanceResponse (Prelude.Maybe Prelude.Text)
createInstanceResponse_id :: Lens' CreateInstanceResponse (Maybe Text)
createInstanceResponse_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateInstanceResponse' {Maybe Text
id :: Maybe Text
$sel:id:CreateInstanceResponse' :: CreateInstanceResponse -> Maybe Text
id} -> Maybe Text
id) (\s :: CreateInstanceResponse
s@CreateInstanceResponse' {} Maybe Text
a -> CreateInstanceResponse
s {$sel:id:CreateInstanceResponse' :: Maybe Text
id = Maybe Text
a} :: CreateInstanceResponse)

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

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