{-# 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.EMRServerless.UpdateApplication
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates a specified application. An application has to be in a stopped
-- or created state in order to be updated.
module Amazonka.EMRServerless.UpdateApplication
  ( -- * Creating a Request
    UpdateApplication (..),
    newUpdateApplication,

    -- * Request Lenses
    updateApplication_architecture,
    updateApplication_autoStartConfiguration,
    updateApplication_autoStopConfiguration,
    updateApplication_imageConfiguration,
    updateApplication_initialCapacity,
    updateApplication_maximumCapacity,
    updateApplication_networkConfiguration,
    updateApplication_workerTypeSpecifications,
    updateApplication_applicationId,
    updateApplication_clientToken,

    -- * Destructuring the Response
    UpdateApplicationResponse (..),
    newUpdateApplicationResponse,

    -- * Response Lenses
    updateApplicationResponse_httpStatus,
    updateApplicationResponse_application,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EMRServerless.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newUpdateApplication' smart constructor.
data UpdateApplication = UpdateApplication'
  { -- | The CPU architecture of an application.
    UpdateApplication -> Maybe Architecture
architecture :: Prelude.Maybe Architecture,
    -- | The configuration for an application to automatically start on job
    -- submission.
    UpdateApplication -> Maybe AutoStartConfig
autoStartConfiguration :: Prelude.Maybe AutoStartConfig,
    -- | The configuration for an application to automatically stop after a
    -- certain amount of time being idle.
    UpdateApplication -> Maybe AutoStopConfig
autoStopConfiguration :: Prelude.Maybe AutoStopConfig,
    -- | The image configuration to be used for all worker types. You can either
    -- set this parameter or @imageConfiguration@ for each worker type in
    -- @WorkerTypeSpecificationInput@.
    UpdateApplication -> Maybe ImageConfigurationInput
imageConfiguration :: Prelude.Maybe ImageConfigurationInput,
    -- | The capacity to initialize when the application is updated.
    UpdateApplication -> Maybe (HashMap Text InitialCapacityConfig)
initialCapacity :: Prelude.Maybe (Prelude.HashMap Prelude.Text InitialCapacityConfig),
    -- | The maximum capacity to allocate when the application is updated. This
    -- is cumulative across all workers at any given point in time during the
    -- lifespan of the application. No new resources will be created once any
    -- one of the defined limits is hit.
    UpdateApplication -> Maybe MaximumAllowedResources
maximumCapacity :: Prelude.Maybe MaximumAllowedResources,
    UpdateApplication -> Maybe NetworkConfiguration
networkConfiguration :: Prelude.Maybe NetworkConfiguration,
    -- | The key-value pairs that specify worker type to
    -- @WorkerTypeSpecificationInput@. This parameter must contain all valid
    -- worker types for a Spark or Hive application. Valid worker types include
    -- @Driver@ and @Executor@ for Spark applications and @HiveDriver@ and
    -- @TezTask@ for Hive applications. You can either set image details in
    -- this parameter for each worker type, or in @imageConfiguration@ for all
    -- worker types.
    UpdateApplication
-> Maybe (HashMap Text WorkerTypeSpecificationInput)
workerTypeSpecifications :: Prelude.Maybe (Prelude.HashMap Prelude.Text WorkerTypeSpecificationInput),
    -- | The ID of the application to update.
    UpdateApplication -> Text
applicationId :: Prelude.Text,
    -- | The client idempotency token of the application to update. Its value
    -- must be unique for each request.
    UpdateApplication -> Text
clientToken :: Prelude.Text
  }
  deriving (UpdateApplication -> UpdateApplication -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateApplication -> UpdateApplication -> Bool
$c/= :: UpdateApplication -> UpdateApplication -> Bool
== :: UpdateApplication -> UpdateApplication -> Bool
$c== :: UpdateApplication -> UpdateApplication -> Bool
Prelude.Eq, ReadPrec [UpdateApplication]
ReadPrec UpdateApplication
Int -> ReadS UpdateApplication
ReadS [UpdateApplication]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateApplication]
$creadListPrec :: ReadPrec [UpdateApplication]
readPrec :: ReadPrec UpdateApplication
$creadPrec :: ReadPrec UpdateApplication
readList :: ReadS [UpdateApplication]
$creadList :: ReadS [UpdateApplication]
readsPrec :: Int -> ReadS UpdateApplication
$creadsPrec :: Int -> ReadS UpdateApplication
Prelude.Read, Int -> UpdateApplication -> ShowS
[UpdateApplication] -> ShowS
UpdateApplication -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateApplication] -> ShowS
$cshowList :: [UpdateApplication] -> ShowS
show :: UpdateApplication -> String
$cshow :: UpdateApplication -> String
showsPrec :: Int -> UpdateApplication -> ShowS
$cshowsPrec :: Int -> UpdateApplication -> ShowS
Prelude.Show, forall x. Rep UpdateApplication x -> UpdateApplication
forall x. UpdateApplication -> Rep UpdateApplication x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateApplication x -> UpdateApplication
$cfrom :: forall x. UpdateApplication -> Rep UpdateApplication x
Prelude.Generic)

-- |
-- Create a value of 'UpdateApplication' 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:
--
-- 'architecture', 'updateApplication_architecture' - The CPU architecture of an application.
--
-- 'autoStartConfiguration', 'updateApplication_autoStartConfiguration' - The configuration for an application to automatically start on job
-- submission.
--
-- 'autoStopConfiguration', 'updateApplication_autoStopConfiguration' - The configuration for an application to automatically stop after a
-- certain amount of time being idle.
--
-- 'imageConfiguration', 'updateApplication_imageConfiguration' - The image configuration to be used for all worker types. You can either
-- set this parameter or @imageConfiguration@ for each worker type in
-- @WorkerTypeSpecificationInput@.
--
-- 'initialCapacity', 'updateApplication_initialCapacity' - The capacity to initialize when the application is updated.
--
-- 'maximumCapacity', 'updateApplication_maximumCapacity' - The maximum capacity to allocate when the application is updated. This
-- is cumulative across all workers at any given point in time during the
-- lifespan of the application. No new resources will be created once any
-- one of the defined limits is hit.
--
-- 'networkConfiguration', 'updateApplication_networkConfiguration' - Undocumented member.
--
-- 'workerTypeSpecifications', 'updateApplication_workerTypeSpecifications' - The key-value pairs that specify worker type to
-- @WorkerTypeSpecificationInput@. This parameter must contain all valid
-- worker types for a Spark or Hive application. Valid worker types include
-- @Driver@ and @Executor@ for Spark applications and @HiveDriver@ and
-- @TezTask@ for Hive applications. You can either set image details in
-- this parameter for each worker type, or in @imageConfiguration@ for all
-- worker types.
--
-- 'applicationId', 'updateApplication_applicationId' - The ID of the application to update.
--
-- 'clientToken', 'updateApplication_clientToken' - The client idempotency token of the application to update. Its value
-- must be unique for each request.
newUpdateApplication ::
  -- | 'applicationId'
  Prelude.Text ->
  -- | 'clientToken'
  Prelude.Text ->
  UpdateApplication
newUpdateApplication :: Text -> Text -> UpdateApplication
newUpdateApplication Text
pApplicationId_ Text
pClientToken_ =
  UpdateApplication'
    { $sel:architecture:UpdateApplication' :: Maybe Architecture
architecture = forall a. Maybe a
Prelude.Nothing,
      $sel:autoStartConfiguration:UpdateApplication' :: Maybe AutoStartConfig
autoStartConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:autoStopConfiguration:UpdateApplication' :: Maybe AutoStopConfig
autoStopConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:imageConfiguration:UpdateApplication' :: Maybe ImageConfigurationInput
imageConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:initialCapacity:UpdateApplication' :: Maybe (HashMap Text InitialCapacityConfig)
initialCapacity = forall a. Maybe a
Prelude.Nothing,
      $sel:maximumCapacity:UpdateApplication' :: Maybe MaximumAllowedResources
maximumCapacity = forall a. Maybe a
Prelude.Nothing,
      $sel:networkConfiguration:UpdateApplication' :: Maybe NetworkConfiguration
networkConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:workerTypeSpecifications:UpdateApplication' :: Maybe (HashMap Text WorkerTypeSpecificationInput)
workerTypeSpecifications = forall a. Maybe a
Prelude.Nothing,
      $sel:applicationId:UpdateApplication' :: Text
applicationId = Text
pApplicationId_,
      $sel:clientToken:UpdateApplication' :: Text
clientToken = Text
pClientToken_
    }

-- | The CPU architecture of an application.
updateApplication_architecture :: Lens.Lens' UpdateApplication (Prelude.Maybe Architecture)
updateApplication_architecture :: Lens' UpdateApplication (Maybe Architecture)
updateApplication_architecture = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApplication' {Maybe Architecture
architecture :: Maybe Architecture
$sel:architecture:UpdateApplication' :: UpdateApplication -> Maybe Architecture
architecture} -> Maybe Architecture
architecture) (\s :: UpdateApplication
s@UpdateApplication' {} Maybe Architecture
a -> UpdateApplication
s {$sel:architecture:UpdateApplication' :: Maybe Architecture
architecture = Maybe Architecture
a} :: UpdateApplication)

-- | The configuration for an application to automatically start on job
-- submission.
updateApplication_autoStartConfiguration :: Lens.Lens' UpdateApplication (Prelude.Maybe AutoStartConfig)
updateApplication_autoStartConfiguration :: Lens' UpdateApplication (Maybe AutoStartConfig)
updateApplication_autoStartConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApplication' {Maybe AutoStartConfig
autoStartConfiguration :: Maybe AutoStartConfig
$sel:autoStartConfiguration:UpdateApplication' :: UpdateApplication -> Maybe AutoStartConfig
autoStartConfiguration} -> Maybe AutoStartConfig
autoStartConfiguration) (\s :: UpdateApplication
s@UpdateApplication' {} Maybe AutoStartConfig
a -> UpdateApplication
s {$sel:autoStartConfiguration:UpdateApplication' :: Maybe AutoStartConfig
autoStartConfiguration = Maybe AutoStartConfig
a} :: UpdateApplication)

-- | The configuration for an application to automatically stop after a
-- certain amount of time being idle.
updateApplication_autoStopConfiguration :: Lens.Lens' UpdateApplication (Prelude.Maybe AutoStopConfig)
updateApplication_autoStopConfiguration :: Lens' UpdateApplication (Maybe AutoStopConfig)
updateApplication_autoStopConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApplication' {Maybe AutoStopConfig
autoStopConfiguration :: Maybe AutoStopConfig
$sel:autoStopConfiguration:UpdateApplication' :: UpdateApplication -> Maybe AutoStopConfig
autoStopConfiguration} -> Maybe AutoStopConfig
autoStopConfiguration) (\s :: UpdateApplication
s@UpdateApplication' {} Maybe AutoStopConfig
a -> UpdateApplication
s {$sel:autoStopConfiguration:UpdateApplication' :: Maybe AutoStopConfig
autoStopConfiguration = Maybe AutoStopConfig
a} :: UpdateApplication)

-- | The image configuration to be used for all worker types. You can either
-- set this parameter or @imageConfiguration@ for each worker type in
-- @WorkerTypeSpecificationInput@.
updateApplication_imageConfiguration :: Lens.Lens' UpdateApplication (Prelude.Maybe ImageConfigurationInput)
updateApplication_imageConfiguration :: Lens' UpdateApplication (Maybe ImageConfigurationInput)
updateApplication_imageConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApplication' {Maybe ImageConfigurationInput
imageConfiguration :: Maybe ImageConfigurationInput
$sel:imageConfiguration:UpdateApplication' :: UpdateApplication -> Maybe ImageConfigurationInput
imageConfiguration} -> Maybe ImageConfigurationInput
imageConfiguration) (\s :: UpdateApplication
s@UpdateApplication' {} Maybe ImageConfigurationInput
a -> UpdateApplication
s {$sel:imageConfiguration:UpdateApplication' :: Maybe ImageConfigurationInput
imageConfiguration = Maybe ImageConfigurationInput
a} :: UpdateApplication)

-- | The capacity to initialize when the application is updated.
updateApplication_initialCapacity :: Lens.Lens' UpdateApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text InitialCapacityConfig))
updateApplication_initialCapacity :: Lens'
  UpdateApplication (Maybe (HashMap Text InitialCapacityConfig))
updateApplication_initialCapacity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApplication' {Maybe (HashMap Text InitialCapacityConfig)
initialCapacity :: Maybe (HashMap Text InitialCapacityConfig)
$sel:initialCapacity:UpdateApplication' :: UpdateApplication -> Maybe (HashMap Text InitialCapacityConfig)
initialCapacity} -> Maybe (HashMap Text InitialCapacityConfig)
initialCapacity) (\s :: UpdateApplication
s@UpdateApplication' {} Maybe (HashMap Text InitialCapacityConfig)
a -> UpdateApplication
s {$sel:initialCapacity:UpdateApplication' :: Maybe (HashMap Text InitialCapacityConfig)
initialCapacity = Maybe (HashMap Text InitialCapacityConfig)
a} :: UpdateApplication) 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 maximum capacity to allocate when the application is updated. This
-- is cumulative across all workers at any given point in time during the
-- lifespan of the application. No new resources will be created once any
-- one of the defined limits is hit.
updateApplication_maximumCapacity :: Lens.Lens' UpdateApplication (Prelude.Maybe MaximumAllowedResources)
updateApplication_maximumCapacity :: Lens' UpdateApplication (Maybe MaximumAllowedResources)
updateApplication_maximumCapacity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApplication' {Maybe MaximumAllowedResources
maximumCapacity :: Maybe MaximumAllowedResources
$sel:maximumCapacity:UpdateApplication' :: UpdateApplication -> Maybe MaximumAllowedResources
maximumCapacity} -> Maybe MaximumAllowedResources
maximumCapacity) (\s :: UpdateApplication
s@UpdateApplication' {} Maybe MaximumAllowedResources
a -> UpdateApplication
s {$sel:maximumCapacity:UpdateApplication' :: Maybe MaximumAllowedResources
maximumCapacity = Maybe MaximumAllowedResources
a} :: UpdateApplication)

-- | Undocumented member.
updateApplication_networkConfiguration :: Lens.Lens' UpdateApplication (Prelude.Maybe NetworkConfiguration)
updateApplication_networkConfiguration :: Lens' UpdateApplication (Maybe NetworkConfiguration)
updateApplication_networkConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApplication' {Maybe NetworkConfiguration
networkConfiguration :: Maybe NetworkConfiguration
$sel:networkConfiguration:UpdateApplication' :: UpdateApplication -> Maybe NetworkConfiguration
networkConfiguration} -> Maybe NetworkConfiguration
networkConfiguration) (\s :: UpdateApplication
s@UpdateApplication' {} Maybe NetworkConfiguration
a -> UpdateApplication
s {$sel:networkConfiguration:UpdateApplication' :: Maybe NetworkConfiguration
networkConfiguration = Maybe NetworkConfiguration
a} :: UpdateApplication)

-- | The key-value pairs that specify worker type to
-- @WorkerTypeSpecificationInput@. This parameter must contain all valid
-- worker types for a Spark or Hive application. Valid worker types include
-- @Driver@ and @Executor@ for Spark applications and @HiveDriver@ and
-- @TezTask@ for Hive applications. You can either set image details in
-- this parameter for each worker type, or in @imageConfiguration@ for all
-- worker types.
updateApplication_workerTypeSpecifications :: Lens.Lens' UpdateApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text WorkerTypeSpecificationInput))
updateApplication_workerTypeSpecifications :: Lens'
  UpdateApplication
  (Maybe (HashMap Text WorkerTypeSpecificationInput))
updateApplication_workerTypeSpecifications = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApplication' {Maybe (HashMap Text WorkerTypeSpecificationInput)
workerTypeSpecifications :: Maybe (HashMap Text WorkerTypeSpecificationInput)
$sel:workerTypeSpecifications:UpdateApplication' :: UpdateApplication
-> Maybe (HashMap Text WorkerTypeSpecificationInput)
workerTypeSpecifications} -> Maybe (HashMap Text WorkerTypeSpecificationInput)
workerTypeSpecifications) (\s :: UpdateApplication
s@UpdateApplication' {} Maybe (HashMap Text WorkerTypeSpecificationInput)
a -> UpdateApplication
s {$sel:workerTypeSpecifications:UpdateApplication' :: Maybe (HashMap Text WorkerTypeSpecificationInput)
workerTypeSpecifications = Maybe (HashMap Text WorkerTypeSpecificationInput)
a} :: UpdateApplication) 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 ID of the application to update.
updateApplication_applicationId :: Lens.Lens' UpdateApplication Prelude.Text
updateApplication_applicationId :: Lens' UpdateApplication Text
updateApplication_applicationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApplication' {Text
applicationId :: Text
$sel:applicationId:UpdateApplication' :: UpdateApplication -> Text
applicationId} -> Text
applicationId) (\s :: UpdateApplication
s@UpdateApplication' {} Text
a -> UpdateApplication
s {$sel:applicationId:UpdateApplication' :: Text
applicationId = Text
a} :: UpdateApplication)

-- | The client idempotency token of the application to update. Its value
-- must be unique for each request.
updateApplication_clientToken :: Lens.Lens' UpdateApplication Prelude.Text
updateApplication_clientToken :: Lens' UpdateApplication Text
updateApplication_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApplication' {Text
clientToken :: Text
$sel:clientToken:UpdateApplication' :: UpdateApplication -> Text
clientToken} -> Text
clientToken) (\s :: UpdateApplication
s@UpdateApplication' {} Text
a -> UpdateApplication
s {$sel:clientToken:UpdateApplication' :: Text
clientToken = Text
a} :: UpdateApplication)

instance Core.AWSRequest UpdateApplication where
  type
    AWSResponse UpdateApplication =
      UpdateApplicationResponse
  request :: (Service -> Service)
-> UpdateApplication -> Request UpdateApplication
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.patchJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateApplication
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateApplication)))
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 ->
          Int -> Application -> UpdateApplicationResponse
UpdateApplicationResponse'
            forall (f :: * -> *) a b. Functor 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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"application")
      )

instance Prelude.Hashable UpdateApplication where
  hashWithSalt :: Int -> UpdateApplication -> Int
hashWithSalt Int
_salt UpdateApplication' {Maybe (HashMap Text InitialCapacityConfig)
Maybe (HashMap Text WorkerTypeSpecificationInput)
Maybe Architecture
Maybe AutoStartConfig
Maybe AutoStopConfig
Maybe ImageConfigurationInput
Maybe MaximumAllowedResources
Maybe NetworkConfiguration
Text
clientToken :: Text
applicationId :: Text
workerTypeSpecifications :: Maybe (HashMap Text WorkerTypeSpecificationInput)
networkConfiguration :: Maybe NetworkConfiguration
maximumCapacity :: Maybe MaximumAllowedResources
initialCapacity :: Maybe (HashMap Text InitialCapacityConfig)
imageConfiguration :: Maybe ImageConfigurationInput
autoStopConfiguration :: Maybe AutoStopConfig
autoStartConfiguration :: Maybe AutoStartConfig
architecture :: Maybe Architecture
$sel:clientToken:UpdateApplication' :: UpdateApplication -> Text
$sel:applicationId:UpdateApplication' :: UpdateApplication -> Text
$sel:workerTypeSpecifications:UpdateApplication' :: UpdateApplication
-> Maybe (HashMap Text WorkerTypeSpecificationInput)
$sel:networkConfiguration:UpdateApplication' :: UpdateApplication -> Maybe NetworkConfiguration
$sel:maximumCapacity:UpdateApplication' :: UpdateApplication -> Maybe MaximumAllowedResources
$sel:initialCapacity:UpdateApplication' :: UpdateApplication -> Maybe (HashMap Text InitialCapacityConfig)
$sel:imageConfiguration:UpdateApplication' :: UpdateApplication -> Maybe ImageConfigurationInput
$sel:autoStopConfiguration:UpdateApplication' :: UpdateApplication -> Maybe AutoStopConfig
$sel:autoStartConfiguration:UpdateApplication' :: UpdateApplication -> Maybe AutoStartConfig
$sel:architecture:UpdateApplication' :: UpdateApplication -> Maybe Architecture
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Architecture
architecture
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AutoStartConfig
autoStartConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AutoStopConfig
autoStopConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ImageConfigurationInput
imageConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text InitialCapacityConfig)
initialCapacity
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe MaximumAllowedResources
maximumCapacity
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe NetworkConfiguration
networkConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text WorkerTypeSpecificationInput)
workerTypeSpecifications
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
applicationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
clientToken

instance Prelude.NFData UpdateApplication where
  rnf :: UpdateApplication -> ()
rnf UpdateApplication' {Maybe (HashMap Text InitialCapacityConfig)
Maybe (HashMap Text WorkerTypeSpecificationInput)
Maybe Architecture
Maybe AutoStartConfig
Maybe AutoStopConfig
Maybe ImageConfigurationInput
Maybe MaximumAllowedResources
Maybe NetworkConfiguration
Text
clientToken :: Text
applicationId :: Text
workerTypeSpecifications :: Maybe (HashMap Text WorkerTypeSpecificationInput)
networkConfiguration :: Maybe NetworkConfiguration
maximumCapacity :: Maybe MaximumAllowedResources
initialCapacity :: Maybe (HashMap Text InitialCapacityConfig)
imageConfiguration :: Maybe ImageConfigurationInput
autoStopConfiguration :: Maybe AutoStopConfig
autoStartConfiguration :: Maybe AutoStartConfig
architecture :: Maybe Architecture
$sel:clientToken:UpdateApplication' :: UpdateApplication -> Text
$sel:applicationId:UpdateApplication' :: UpdateApplication -> Text
$sel:workerTypeSpecifications:UpdateApplication' :: UpdateApplication
-> Maybe (HashMap Text WorkerTypeSpecificationInput)
$sel:networkConfiguration:UpdateApplication' :: UpdateApplication -> Maybe NetworkConfiguration
$sel:maximumCapacity:UpdateApplication' :: UpdateApplication -> Maybe MaximumAllowedResources
$sel:initialCapacity:UpdateApplication' :: UpdateApplication -> Maybe (HashMap Text InitialCapacityConfig)
$sel:imageConfiguration:UpdateApplication' :: UpdateApplication -> Maybe ImageConfigurationInput
$sel:autoStopConfiguration:UpdateApplication' :: UpdateApplication -> Maybe AutoStopConfig
$sel:autoStartConfiguration:UpdateApplication' :: UpdateApplication -> Maybe AutoStartConfig
$sel:architecture:UpdateApplication' :: UpdateApplication -> Maybe Architecture
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Architecture
architecture
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AutoStartConfig
autoStartConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AutoStopConfig
autoStopConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ImageConfigurationInput
imageConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text InitialCapacityConfig)
initialCapacity
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe MaximumAllowedResources
maximumCapacity
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe NetworkConfiguration
networkConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text WorkerTypeSpecificationInput)
workerTypeSpecifications
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
applicationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
clientToken

instance Data.ToHeaders UpdateApplication where
  toHeaders :: UpdateApplication -> 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 UpdateApplication where
  toJSON :: UpdateApplication -> Value
toJSON UpdateApplication' {Maybe (HashMap Text InitialCapacityConfig)
Maybe (HashMap Text WorkerTypeSpecificationInput)
Maybe Architecture
Maybe AutoStartConfig
Maybe AutoStopConfig
Maybe ImageConfigurationInput
Maybe MaximumAllowedResources
Maybe NetworkConfiguration
Text
clientToken :: Text
applicationId :: Text
workerTypeSpecifications :: Maybe (HashMap Text WorkerTypeSpecificationInput)
networkConfiguration :: Maybe NetworkConfiguration
maximumCapacity :: Maybe MaximumAllowedResources
initialCapacity :: Maybe (HashMap Text InitialCapacityConfig)
imageConfiguration :: Maybe ImageConfigurationInput
autoStopConfiguration :: Maybe AutoStopConfig
autoStartConfiguration :: Maybe AutoStartConfig
architecture :: Maybe Architecture
$sel:clientToken:UpdateApplication' :: UpdateApplication -> Text
$sel:applicationId:UpdateApplication' :: UpdateApplication -> Text
$sel:workerTypeSpecifications:UpdateApplication' :: UpdateApplication
-> Maybe (HashMap Text WorkerTypeSpecificationInput)
$sel:networkConfiguration:UpdateApplication' :: UpdateApplication -> Maybe NetworkConfiguration
$sel:maximumCapacity:UpdateApplication' :: UpdateApplication -> Maybe MaximumAllowedResources
$sel:initialCapacity:UpdateApplication' :: UpdateApplication -> Maybe (HashMap Text InitialCapacityConfig)
$sel:imageConfiguration:UpdateApplication' :: UpdateApplication -> Maybe ImageConfigurationInput
$sel:autoStopConfiguration:UpdateApplication' :: UpdateApplication -> Maybe AutoStopConfig
$sel:autoStartConfiguration:UpdateApplication' :: UpdateApplication -> Maybe AutoStartConfig
$sel:architecture:UpdateApplication' :: UpdateApplication -> Maybe Architecture
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"architecture" 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 Architecture
architecture,
            (Key
"autoStartConfiguration" 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 AutoStartConfig
autoStartConfiguration,
            (Key
"autoStopConfiguration" 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 AutoStopConfig
autoStopConfiguration,
            (Key
"imageConfiguration" 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 ImageConfigurationInput
imageConfiguration,
            (Key
"initialCapacity" 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 InitialCapacityConfig)
initialCapacity,
            (Key
"maximumCapacity" 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 MaximumAllowedResources
maximumCapacity,
            (Key
"networkConfiguration" 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 NetworkConfiguration
networkConfiguration,
            (Key
"workerTypeSpecifications" 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 WorkerTypeSpecificationInput)
workerTypeSpecifications,
            forall a. a -> Maybe a
Prelude.Just (Key
"clientToken" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
clientToken)
          ]
      )

instance Data.ToPath UpdateApplication where
  toPath :: UpdateApplication -> ByteString
toPath UpdateApplication' {Maybe (HashMap Text InitialCapacityConfig)
Maybe (HashMap Text WorkerTypeSpecificationInput)
Maybe Architecture
Maybe AutoStartConfig
Maybe AutoStopConfig
Maybe ImageConfigurationInput
Maybe MaximumAllowedResources
Maybe NetworkConfiguration
Text
clientToken :: Text
applicationId :: Text
workerTypeSpecifications :: Maybe (HashMap Text WorkerTypeSpecificationInput)
networkConfiguration :: Maybe NetworkConfiguration
maximumCapacity :: Maybe MaximumAllowedResources
initialCapacity :: Maybe (HashMap Text InitialCapacityConfig)
imageConfiguration :: Maybe ImageConfigurationInput
autoStopConfiguration :: Maybe AutoStopConfig
autoStartConfiguration :: Maybe AutoStartConfig
architecture :: Maybe Architecture
$sel:clientToken:UpdateApplication' :: UpdateApplication -> Text
$sel:applicationId:UpdateApplication' :: UpdateApplication -> Text
$sel:workerTypeSpecifications:UpdateApplication' :: UpdateApplication
-> Maybe (HashMap Text WorkerTypeSpecificationInput)
$sel:networkConfiguration:UpdateApplication' :: UpdateApplication -> Maybe NetworkConfiguration
$sel:maximumCapacity:UpdateApplication' :: UpdateApplication -> Maybe MaximumAllowedResources
$sel:initialCapacity:UpdateApplication' :: UpdateApplication -> Maybe (HashMap Text InitialCapacityConfig)
$sel:imageConfiguration:UpdateApplication' :: UpdateApplication -> Maybe ImageConfigurationInput
$sel:autoStopConfiguration:UpdateApplication' :: UpdateApplication -> Maybe AutoStopConfig
$sel:autoStartConfiguration:UpdateApplication' :: UpdateApplication -> Maybe AutoStartConfig
$sel:architecture:UpdateApplication' :: UpdateApplication -> Maybe Architecture
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/applications/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
applicationId]

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

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

-- |
-- Create a value of 'UpdateApplicationResponse' 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:
--
-- 'httpStatus', 'updateApplicationResponse_httpStatus' - The response's http status code.
--
-- 'application', 'updateApplicationResponse_application' - Information about the updated application.
newUpdateApplicationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'application'
  Application ->
  UpdateApplicationResponse
newUpdateApplicationResponse :: Int -> Application -> UpdateApplicationResponse
newUpdateApplicationResponse
  Int
pHttpStatus_
  Application
pApplication_ =
    UpdateApplicationResponse'
      { $sel:httpStatus:UpdateApplicationResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:application:UpdateApplicationResponse' :: Application
application = Application
pApplication_
      }

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

-- | Information about the updated application.
updateApplicationResponse_application :: Lens.Lens' UpdateApplicationResponse Application
updateApplicationResponse_application :: Lens' UpdateApplicationResponse Application
updateApplicationResponse_application = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateApplicationResponse' {Application
application :: Application
$sel:application:UpdateApplicationResponse' :: UpdateApplicationResponse -> Application
application} -> Application
application) (\s :: UpdateApplicationResponse
s@UpdateApplicationResponse' {} Application
a -> UpdateApplicationResponse
s {$sel:application:UpdateApplicationResponse' :: Application
application = Application
a} :: UpdateApplicationResponse)

instance Prelude.NFData UpdateApplicationResponse where
  rnf :: UpdateApplicationResponse -> ()
rnf UpdateApplicationResponse' {Int
Application
application :: Application
httpStatus :: Int
$sel:application:UpdateApplicationResponse' :: UpdateApplicationResponse -> Application
$sel:httpStatus:UpdateApplicationResponse' :: UpdateApplicationResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Application
application