{-# 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.OpenSearch.UpdateDomainConfig
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Modifies the cluster configuration of the specified domain, such as
-- setting the instance type and the number of instances.
module Amazonka.OpenSearch.UpdateDomainConfig
  ( -- * Creating a Request
    UpdateDomainConfig (..),
    newUpdateDomainConfig,

    -- * Request Lenses
    updateDomainConfig_eBSOptions,
    updateDomainConfig_nodeToNodeEncryptionOptions,
    updateDomainConfig_accessPolicies,
    updateDomainConfig_autoTuneOptions,
    updateDomainConfig_logPublishingOptions,
    updateDomainConfig_clusterConfig,
    updateDomainConfig_advancedSecurityOptions,
    updateDomainConfig_snapshotOptions,
    updateDomainConfig_cognitoOptions,
    updateDomainConfig_encryptionAtRestOptions,
    updateDomainConfig_vPCOptions,
    updateDomainConfig_domainEndpointOptions,
    updateDomainConfig_advancedOptions,
    updateDomainConfig_domainName,

    -- * Destructuring the Response
    UpdateDomainConfigResponse (..),
    newUpdateDomainConfigResponse,

    -- * Response Lenses
    updateDomainConfigResponse_httpStatus,
    updateDomainConfigResponse_domainConfig,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Lens as Lens
import Amazonka.OpenSearch.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | Container for the parameters to the @ UpdateDomain @ operation.
-- Specifies the type and number of instances in the domain cluster.
--
-- /See:/ 'newUpdateDomainConfig' smart constructor.
data UpdateDomainConfig = UpdateDomainConfig'
  { -- | Specify the type and size of the EBS volume to use.
    UpdateDomainConfig -> Maybe EBSOptions
eBSOptions :: Prelude.Maybe EBSOptions,
    -- | Specifies node-to-node encryption options.
    UpdateDomainConfig -> Maybe NodeToNodeEncryptionOptions
nodeToNodeEncryptionOptions :: Prelude.Maybe NodeToNodeEncryptionOptions,
    -- | IAM access policy as a JSON-formatted string.
    UpdateDomainConfig -> Maybe Text
accessPolicies :: Prelude.Maybe Prelude.Text,
    -- | Specifies Auto-Tune options.
    UpdateDomainConfig -> Maybe AutoTuneOptions
autoTuneOptions :: Prelude.Maybe AutoTuneOptions,
    -- | Map of @LogType@ and @LogPublishingOption@, each containing options to
    -- publish a given type of OpenSearch log.
    UpdateDomainConfig -> Maybe (HashMap LogType LogPublishingOption)
logPublishingOptions :: Prelude.Maybe (Prelude.HashMap LogType LogPublishingOption),
    -- | The type and number of instances to instantiate for the domain cluster.
    UpdateDomainConfig -> Maybe ClusterConfig
clusterConfig :: Prelude.Maybe ClusterConfig,
    -- | Specifies advanced security options.
    UpdateDomainConfig -> Maybe AdvancedSecurityOptionsInput
advancedSecurityOptions :: Prelude.Maybe AdvancedSecurityOptionsInput,
    -- | Option to set the time, in UTC format, for the daily automated snapshot.
    -- Default value is @0@ hours.
    UpdateDomainConfig -> Maybe SnapshotOptions
snapshotOptions :: Prelude.Maybe SnapshotOptions,
    -- | Options to specify the Cognito user and identity pools for OpenSearch
    -- Dashboards authentication. For more information, see
    -- <http://docs.aws.amazon.com/opensearch-service/latest/developerguide/cognito-auth.html Configuring Amazon Cognito authentication for OpenSearch Dashboards>.
    UpdateDomainConfig -> Maybe CognitoOptions
cognitoOptions :: Prelude.Maybe CognitoOptions,
    -- | Specifies encryption of data at rest options.
    UpdateDomainConfig -> Maybe EncryptionAtRestOptions
encryptionAtRestOptions :: Prelude.Maybe EncryptionAtRestOptions,
    -- | Options to specify the subnets and security groups for the VPC endpoint.
    -- For more information, see
    -- <http://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html Launching your Amazon OpenSearch Service domains using a VPC>
    -- .
    UpdateDomainConfig -> Maybe VPCOptions
vPCOptions :: Prelude.Maybe VPCOptions,
    -- | Options to specify configuration that will be applied to the domain
    -- endpoint.
    UpdateDomainConfig -> Maybe DomainEndpointOptions
domainEndpointOptions :: Prelude.Maybe DomainEndpointOptions,
    -- | Modifies the advanced option to allow references to indices in an HTTP
    -- request body. Must be @false@ when configuring access to individual
    -- sub-resources. By default, the value is @true@. See
    -- <http://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomain-configure-advanced-options Advanced options>
    -- for more information.
    UpdateDomainConfig -> Maybe (HashMap Text Text)
advancedOptions :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The name of the domain you\'re updating.
    UpdateDomainConfig -> Text
domainName :: Prelude.Text
  }
  deriving (UpdateDomainConfig -> UpdateDomainConfig -> Bool
(UpdateDomainConfig -> UpdateDomainConfig -> Bool)
-> (UpdateDomainConfig -> UpdateDomainConfig -> Bool)
-> Eq UpdateDomainConfig
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateDomainConfig -> UpdateDomainConfig -> Bool
$c/= :: UpdateDomainConfig -> UpdateDomainConfig -> Bool
== :: UpdateDomainConfig -> UpdateDomainConfig -> Bool
$c== :: UpdateDomainConfig -> UpdateDomainConfig -> Bool
Prelude.Eq, Int -> UpdateDomainConfig -> ShowS
[UpdateDomainConfig] -> ShowS
UpdateDomainConfig -> String
(Int -> UpdateDomainConfig -> ShowS)
-> (UpdateDomainConfig -> String)
-> ([UpdateDomainConfig] -> ShowS)
-> Show UpdateDomainConfig
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateDomainConfig] -> ShowS
$cshowList :: [UpdateDomainConfig] -> ShowS
show :: UpdateDomainConfig -> String
$cshow :: UpdateDomainConfig -> String
showsPrec :: Int -> UpdateDomainConfig -> ShowS
$cshowsPrec :: Int -> UpdateDomainConfig -> ShowS
Prelude.Show, (forall x. UpdateDomainConfig -> Rep UpdateDomainConfig x)
-> (forall x. Rep UpdateDomainConfig x -> UpdateDomainConfig)
-> Generic UpdateDomainConfig
forall x. Rep UpdateDomainConfig x -> UpdateDomainConfig
forall x. UpdateDomainConfig -> Rep UpdateDomainConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateDomainConfig x -> UpdateDomainConfig
$cfrom :: forall x. UpdateDomainConfig -> Rep UpdateDomainConfig x
Prelude.Generic)

-- |
-- Create a value of 'UpdateDomainConfig' 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:
--
-- 'eBSOptions', 'updateDomainConfig_eBSOptions' - Specify the type and size of the EBS volume to use.
--
-- 'nodeToNodeEncryptionOptions', 'updateDomainConfig_nodeToNodeEncryptionOptions' - Specifies node-to-node encryption options.
--
-- 'accessPolicies', 'updateDomainConfig_accessPolicies' - IAM access policy as a JSON-formatted string.
--
-- 'autoTuneOptions', 'updateDomainConfig_autoTuneOptions' - Specifies Auto-Tune options.
--
-- 'logPublishingOptions', 'updateDomainConfig_logPublishingOptions' - Map of @LogType@ and @LogPublishingOption@, each containing options to
-- publish a given type of OpenSearch log.
--
-- 'clusterConfig', 'updateDomainConfig_clusterConfig' - The type and number of instances to instantiate for the domain cluster.
--
-- 'advancedSecurityOptions', 'updateDomainConfig_advancedSecurityOptions' - Specifies advanced security options.
--
-- 'snapshotOptions', 'updateDomainConfig_snapshotOptions' - Option to set the time, in UTC format, for the daily automated snapshot.
-- Default value is @0@ hours.
--
-- 'cognitoOptions', 'updateDomainConfig_cognitoOptions' - Options to specify the Cognito user and identity pools for OpenSearch
-- Dashboards authentication. For more information, see
-- <http://docs.aws.amazon.com/opensearch-service/latest/developerguide/cognito-auth.html Configuring Amazon Cognito authentication for OpenSearch Dashboards>.
--
-- 'encryptionAtRestOptions', 'updateDomainConfig_encryptionAtRestOptions' - Specifies encryption of data at rest options.
--
-- 'vPCOptions', 'updateDomainConfig_vPCOptions' - Options to specify the subnets and security groups for the VPC endpoint.
-- For more information, see
-- <http://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html Launching your Amazon OpenSearch Service domains using a VPC>
-- .
--
-- 'domainEndpointOptions', 'updateDomainConfig_domainEndpointOptions' - Options to specify configuration that will be applied to the domain
-- endpoint.
--
-- 'advancedOptions', 'updateDomainConfig_advancedOptions' - Modifies the advanced option to allow references to indices in an HTTP
-- request body. Must be @false@ when configuring access to individual
-- sub-resources. By default, the value is @true@. See
-- <http://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomain-configure-advanced-options Advanced options>
-- for more information.
--
-- 'domainName', 'updateDomainConfig_domainName' - The name of the domain you\'re updating.
newUpdateDomainConfig ::
  -- | 'domainName'
  Prelude.Text ->
  UpdateDomainConfig
newUpdateDomainConfig :: Text -> UpdateDomainConfig
newUpdateDomainConfig Text
pDomainName_ =
  UpdateDomainConfig' :: Maybe EBSOptions
-> Maybe NodeToNodeEncryptionOptions
-> Maybe Text
-> Maybe AutoTuneOptions
-> Maybe (HashMap LogType LogPublishingOption)
-> Maybe ClusterConfig
-> Maybe AdvancedSecurityOptionsInput
-> Maybe SnapshotOptions
-> Maybe CognitoOptions
-> Maybe EncryptionAtRestOptions
-> Maybe VPCOptions
-> Maybe DomainEndpointOptions
-> Maybe (HashMap Text Text)
-> Text
-> UpdateDomainConfig
UpdateDomainConfig'
    { $sel:eBSOptions:UpdateDomainConfig' :: Maybe EBSOptions
eBSOptions = Maybe EBSOptions
forall a. Maybe a
Prelude.Nothing,
      $sel:nodeToNodeEncryptionOptions:UpdateDomainConfig' :: Maybe NodeToNodeEncryptionOptions
nodeToNodeEncryptionOptions = Maybe NodeToNodeEncryptionOptions
forall a. Maybe a
Prelude.Nothing,
      $sel:accessPolicies:UpdateDomainConfig' :: Maybe Text
accessPolicies = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:autoTuneOptions:UpdateDomainConfig' :: Maybe AutoTuneOptions
autoTuneOptions = Maybe AutoTuneOptions
forall a. Maybe a
Prelude.Nothing,
      $sel:logPublishingOptions:UpdateDomainConfig' :: Maybe (HashMap LogType LogPublishingOption)
logPublishingOptions = Maybe (HashMap LogType LogPublishingOption)
forall a. Maybe a
Prelude.Nothing,
      $sel:clusterConfig:UpdateDomainConfig' :: Maybe ClusterConfig
clusterConfig = Maybe ClusterConfig
forall a. Maybe a
Prelude.Nothing,
      $sel:advancedSecurityOptions:UpdateDomainConfig' :: Maybe AdvancedSecurityOptionsInput
advancedSecurityOptions = Maybe AdvancedSecurityOptionsInput
forall a. Maybe a
Prelude.Nothing,
      $sel:snapshotOptions:UpdateDomainConfig' :: Maybe SnapshotOptions
snapshotOptions = Maybe SnapshotOptions
forall a. Maybe a
Prelude.Nothing,
      $sel:cognitoOptions:UpdateDomainConfig' :: Maybe CognitoOptions
cognitoOptions = Maybe CognitoOptions
forall a. Maybe a
Prelude.Nothing,
      $sel:encryptionAtRestOptions:UpdateDomainConfig' :: Maybe EncryptionAtRestOptions
encryptionAtRestOptions = Maybe EncryptionAtRestOptions
forall a. Maybe a
Prelude.Nothing,
      $sel:vPCOptions:UpdateDomainConfig' :: Maybe VPCOptions
vPCOptions = Maybe VPCOptions
forall a. Maybe a
Prelude.Nothing,
      $sel:domainEndpointOptions:UpdateDomainConfig' :: Maybe DomainEndpointOptions
domainEndpointOptions = Maybe DomainEndpointOptions
forall a. Maybe a
Prelude.Nothing,
      $sel:advancedOptions:UpdateDomainConfig' :: Maybe (HashMap Text Text)
advancedOptions = Maybe (HashMap Text Text)
forall a. Maybe a
Prelude.Nothing,
      $sel:domainName:UpdateDomainConfig' :: Text
domainName = Text
pDomainName_
    }

-- | Specify the type and size of the EBS volume to use.
updateDomainConfig_eBSOptions :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe EBSOptions)
updateDomainConfig_eBSOptions :: (Maybe EBSOptions -> f (Maybe EBSOptions))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_eBSOptions = (UpdateDomainConfig -> Maybe EBSOptions)
-> (UpdateDomainConfig -> Maybe EBSOptions -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe EBSOptions)
     (Maybe EBSOptions)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe EBSOptions
eBSOptions :: Maybe EBSOptions
$sel:eBSOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe EBSOptions
eBSOptions} -> Maybe EBSOptions
eBSOptions) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe EBSOptions
a -> UpdateDomainConfig
s {$sel:eBSOptions:UpdateDomainConfig' :: Maybe EBSOptions
eBSOptions = Maybe EBSOptions
a} :: UpdateDomainConfig)

-- | Specifies node-to-node encryption options.
updateDomainConfig_nodeToNodeEncryptionOptions :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe NodeToNodeEncryptionOptions)
updateDomainConfig_nodeToNodeEncryptionOptions :: (Maybe NodeToNodeEncryptionOptions
 -> f (Maybe NodeToNodeEncryptionOptions))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_nodeToNodeEncryptionOptions = (UpdateDomainConfig -> Maybe NodeToNodeEncryptionOptions)
-> (UpdateDomainConfig
    -> Maybe NodeToNodeEncryptionOptions -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe NodeToNodeEncryptionOptions)
     (Maybe NodeToNodeEncryptionOptions)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe NodeToNodeEncryptionOptions
nodeToNodeEncryptionOptions :: Maybe NodeToNodeEncryptionOptions
$sel:nodeToNodeEncryptionOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe NodeToNodeEncryptionOptions
nodeToNodeEncryptionOptions} -> Maybe NodeToNodeEncryptionOptions
nodeToNodeEncryptionOptions) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe NodeToNodeEncryptionOptions
a -> UpdateDomainConfig
s {$sel:nodeToNodeEncryptionOptions:UpdateDomainConfig' :: Maybe NodeToNodeEncryptionOptions
nodeToNodeEncryptionOptions = Maybe NodeToNodeEncryptionOptions
a} :: UpdateDomainConfig)

-- | IAM access policy as a JSON-formatted string.
updateDomainConfig_accessPolicies :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe Prelude.Text)
updateDomainConfig_accessPolicies :: (Maybe Text -> f (Maybe Text))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_accessPolicies = (UpdateDomainConfig -> Maybe Text)
-> (UpdateDomainConfig -> Maybe Text -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig UpdateDomainConfig (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe Text
accessPolicies :: Maybe Text
$sel:accessPolicies:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe Text
accessPolicies} -> Maybe Text
accessPolicies) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe Text
a -> UpdateDomainConfig
s {$sel:accessPolicies:UpdateDomainConfig' :: Maybe Text
accessPolicies = Maybe Text
a} :: UpdateDomainConfig)

-- | Specifies Auto-Tune options.
updateDomainConfig_autoTuneOptions :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe AutoTuneOptions)
updateDomainConfig_autoTuneOptions :: (Maybe AutoTuneOptions -> f (Maybe AutoTuneOptions))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_autoTuneOptions = (UpdateDomainConfig -> Maybe AutoTuneOptions)
-> (UpdateDomainConfig
    -> Maybe AutoTuneOptions -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe AutoTuneOptions)
     (Maybe AutoTuneOptions)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe AutoTuneOptions
autoTuneOptions :: Maybe AutoTuneOptions
$sel:autoTuneOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe AutoTuneOptions
autoTuneOptions} -> Maybe AutoTuneOptions
autoTuneOptions) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe AutoTuneOptions
a -> UpdateDomainConfig
s {$sel:autoTuneOptions:UpdateDomainConfig' :: Maybe AutoTuneOptions
autoTuneOptions = Maybe AutoTuneOptions
a} :: UpdateDomainConfig)

-- | Map of @LogType@ and @LogPublishingOption@, each containing options to
-- publish a given type of OpenSearch log.
updateDomainConfig_logPublishingOptions :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe (Prelude.HashMap LogType LogPublishingOption))
updateDomainConfig_logPublishingOptions :: (Maybe (HashMap LogType LogPublishingOption)
 -> f (Maybe (HashMap LogType LogPublishingOption)))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_logPublishingOptions = (UpdateDomainConfig -> Maybe (HashMap LogType LogPublishingOption))
-> (UpdateDomainConfig
    -> Maybe (HashMap LogType LogPublishingOption)
    -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe (HashMap LogType LogPublishingOption))
     (Maybe (HashMap LogType LogPublishingOption))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe (HashMap LogType LogPublishingOption)
logPublishingOptions :: Maybe (HashMap LogType LogPublishingOption)
$sel:logPublishingOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe (HashMap LogType LogPublishingOption)
logPublishingOptions} -> Maybe (HashMap LogType LogPublishingOption)
logPublishingOptions) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe (HashMap LogType LogPublishingOption)
a -> UpdateDomainConfig
s {$sel:logPublishingOptions:UpdateDomainConfig' :: Maybe (HashMap LogType LogPublishingOption)
logPublishingOptions = Maybe (HashMap LogType LogPublishingOption)
a} :: UpdateDomainConfig) ((Maybe (HashMap LogType LogPublishingOption)
  -> f (Maybe (HashMap LogType LogPublishingOption)))
 -> UpdateDomainConfig -> f UpdateDomainConfig)
-> ((Maybe (HashMap LogType LogPublishingOption)
     -> f (Maybe (HashMap LogType LogPublishingOption)))
    -> Maybe (HashMap LogType LogPublishingOption)
    -> f (Maybe (HashMap LogType LogPublishingOption)))
-> (Maybe (HashMap LogType LogPublishingOption)
    -> f (Maybe (HashMap LogType LogPublishingOption)))
-> UpdateDomainConfig
-> f UpdateDomainConfig
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  (HashMap LogType LogPublishingOption)
  (HashMap LogType LogPublishingOption)
  (HashMap LogType LogPublishingOption)
  (HashMap LogType LogPublishingOption)
-> Iso
     (Maybe (HashMap LogType LogPublishingOption))
     (Maybe (HashMap LogType LogPublishingOption))
     (Maybe (HashMap LogType LogPublishingOption))
     (Maybe (HashMap LogType LogPublishingOption))
forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping AnIso
  (HashMap LogType LogPublishingOption)
  (HashMap LogType LogPublishingOption)
  (HashMap LogType LogPublishingOption)
  (HashMap LogType LogPublishingOption)
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The type and number of instances to instantiate for the domain cluster.
updateDomainConfig_clusterConfig :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe ClusterConfig)
updateDomainConfig_clusterConfig :: (Maybe ClusterConfig -> f (Maybe ClusterConfig))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_clusterConfig = (UpdateDomainConfig -> Maybe ClusterConfig)
-> (UpdateDomainConfig
    -> Maybe ClusterConfig -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe ClusterConfig)
     (Maybe ClusterConfig)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe ClusterConfig
clusterConfig :: Maybe ClusterConfig
$sel:clusterConfig:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe ClusterConfig
clusterConfig} -> Maybe ClusterConfig
clusterConfig) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe ClusterConfig
a -> UpdateDomainConfig
s {$sel:clusterConfig:UpdateDomainConfig' :: Maybe ClusterConfig
clusterConfig = Maybe ClusterConfig
a} :: UpdateDomainConfig)

-- | Specifies advanced security options.
updateDomainConfig_advancedSecurityOptions :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe AdvancedSecurityOptionsInput)
updateDomainConfig_advancedSecurityOptions :: (Maybe AdvancedSecurityOptionsInput
 -> f (Maybe AdvancedSecurityOptionsInput))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_advancedSecurityOptions = (UpdateDomainConfig -> Maybe AdvancedSecurityOptionsInput)
-> (UpdateDomainConfig
    -> Maybe AdvancedSecurityOptionsInput -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe AdvancedSecurityOptionsInput)
     (Maybe AdvancedSecurityOptionsInput)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe AdvancedSecurityOptionsInput
advancedSecurityOptions :: Maybe AdvancedSecurityOptionsInput
$sel:advancedSecurityOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe AdvancedSecurityOptionsInput
advancedSecurityOptions} -> Maybe AdvancedSecurityOptionsInput
advancedSecurityOptions) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe AdvancedSecurityOptionsInput
a -> UpdateDomainConfig
s {$sel:advancedSecurityOptions:UpdateDomainConfig' :: Maybe AdvancedSecurityOptionsInput
advancedSecurityOptions = Maybe AdvancedSecurityOptionsInput
a} :: UpdateDomainConfig)

-- | Option to set the time, in UTC format, for the daily automated snapshot.
-- Default value is @0@ hours.
updateDomainConfig_snapshotOptions :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe SnapshotOptions)
updateDomainConfig_snapshotOptions :: (Maybe SnapshotOptions -> f (Maybe SnapshotOptions))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_snapshotOptions = (UpdateDomainConfig -> Maybe SnapshotOptions)
-> (UpdateDomainConfig
    -> Maybe SnapshotOptions -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe SnapshotOptions)
     (Maybe SnapshotOptions)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe SnapshotOptions
snapshotOptions :: Maybe SnapshotOptions
$sel:snapshotOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe SnapshotOptions
snapshotOptions} -> Maybe SnapshotOptions
snapshotOptions) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe SnapshotOptions
a -> UpdateDomainConfig
s {$sel:snapshotOptions:UpdateDomainConfig' :: Maybe SnapshotOptions
snapshotOptions = Maybe SnapshotOptions
a} :: UpdateDomainConfig)

-- | Options to specify the Cognito user and identity pools for OpenSearch
-- Dashboards authentication. For more information, see
-- <http://docs.aws.amazon.com/opensearch-service/latest/developerguide/cognito-auth.html Configuring Amazon Cognito authentication for OpenSearch Dashboards>.
updateDomainConfig_cognitoOptions :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe CognitoOptions)
updateDomainConfig_cognitoOptions :: (Maybe CognitoOptions -> f (Maybe CognitoOptions))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_cognitoOptions = (UpdateDomainConfig -> Maybe CognitoOptions)
-> (UpdateDomainConfig
    -> Maybe CognitoOptions -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe CognitoOptions)
     (Maybe CognitoOptions)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe CognitoOptions
cognitoOptions :: Maybe CognitoOptions
$sel:cognitoOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe CognitoOptions
cognitoOptions} -> Maybe CognitoOptions
cognitoOptions) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe CognitoOptions
a -> UpdateDomainConfig
s {$sel:cognitoOptions:UpdateDomainConfig' :: Maybe CognitoOptions
cognitoOptions = Maybe CognitoOptions
a} :: UpdateDomainConfig)

-- | Specifies encryption of data at rest options.
updateDomainConfig_encryptionAtRestOptions :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe EncryptionAtRestOptions)
updateDomainConfig_encryptionAtRestOptions :: (Maybe EncryptionAtRestOptions
 -> f (Maybe EncryptionAtRestOptions))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_encryptionAtRestOptions = (UpdateDomainConfig -> Maybe EncryptionAtRestOptions)
-> (UpdateDomainConfig
    -> Maybe EncryptionAtRestOptions -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe EncryptionAtRestOptions)
     (Maybe EncryptionAtRestOptions)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe EncryptionAtRestOptions
encryptionAtRestOptions :: Maybe EncryptionAtRestOptions
$sel:encryptionAtRestOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe EncryptionAtRestOptions
encryptionAtRestOptions} -> Maybe EncryptionAtRestOptions
encryptionAtRestOptions) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe EncryptionAtRestOptions
a -> UpdateDomainConfig
s {$sel:encryptionAtRestOptions:UpdateDomainConfig' :: Maybe EncryptionAtRestOptions
encryptionAtRestOptions = Maybe EncryptionAtRestOptions
a} :: UpdateDomainConfig)

-- | Options to specify the subnets and security groups for the VPC endpoint.
-- For more information, see
-- <http://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html Launching your Amazon OpenSearch Service domains using a VPC>
-- .
updateDomainConfig_vPCOptions :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe VPCOptions)
updateDomainConfig_vPCOptions :: (Maybe VPCOptions -> f (Maybe VPCOptions))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_vPCOptions = (UpdateDomainConfig -> Maybe VPCOptions)
-> (UpdateDomainConfig -> Maybe VPCOptions -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe VPCOptions)
     (Maybe VPCOptions)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe VPCOptions
vPCOptions :: Maybe VPCOptions
$sel:vPCOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe VPCOptions
vPCOptions} -> Maybe VPCOptions
vPCOptions) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe VPCOptions
a -> UpdateDomainConfig
s {$sel:vPCOptions:UpdateDomainConfig' :: Maybe VPCOptions
vPCOptions = Maybe VPCOptions
a} :: UpdateDomainConfig)

-- | Options to specify configuration that will be applied to the domain
-- endpoint.
updateDomainConfig_domainEndpointOptions :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe DomainEndpointOptions)
updateDomainConfig_domainEndpointOptions :: (Maybe DomainEndpointOptions -> f (Maybe DomainEndpointOptions))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_domainEndpointOptions = (UpdateDomainConfig -> Maybe DomainEndpointOptions)
-> (UpdateDomainConfig
    -> Maybe DomainEndpointOptions -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe DomainEndpointOptions)
     (Maybe DomainEndpointOptions)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe DomainEndpointOptions
domainEndpointOptions :: Maybe DomainEndpointOptions
$sel:domainEndpointOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe DomainEndpointOptions
domainEndpointOptions} -> Maybe DomainEndpointOptions
domainEndpointOptions) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe DomainEndpointOptions
a -> UpdateDomainConfig
s {$sel:domainEndpointOptions:UpdateDomainConfig' :: Maybe DomainEndpointOptions
domainEndpointOptions = Maybe DomainEndpointOptions
a} :: UpdateDomainConfig)

-- | Modifies the advanced option to allow references to indices in an HTTP
-- request body. Must be @false@ when configuring access to individual
-- sub-resources. By default, the value is @true@. See
-- <http://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomain-configure-advanced-options Advanced options>
-- for more information.
updateDomainConfig_advancedOptions :: Lens.Lens' UpdateDomainConfig (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
updateDomainConfig_advancedOptions :: (Maybe (HashMap Text Text) -> f (Maybe (HashMap Text Text)))
-> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_advancedOptions = (UpdateDomainConfig -> Maybe (HashMap Text Text))
-> (UpdateDomainConfig
    -> Maybe (HashMap Text Text) -> UpdateDomainConfig)
-> Lens
     UpdateDomainConfig
     UpdateDomainConfig
     (Maybe (HashMap Text Text))
     (Maybe (HashMap Text Text))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Maybe (HashMap Text Text)
advancedOptions :: Maybe (HashMap Text Text)
$sel:advancedOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe (HashMap Text Text)
advancedOptions} -> Maybe (HashMap Text Text)
advancedOptions) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Maybe (HashMap Text Text)
a -> UpdateDomainConfig
s {$sel:advancedOptions:UpdateDomainConfig' :: Maybe (HashMap Text Text)
advancedOptions = Maybe (HashMap Text Text)
a} :: UpdateDomainConfig) ((Maybe (HashMap Text Text) -> f (Maybe (HashMap Text Text)))
 -> UpdateDomainConfig -> f UpdateDomainConfig)
-> ((Maybe (HashMap Text Text) -> f (Maybe (HashMap Text Text)))
    -> Maybe (HashMap Text Text) -> f (Maybe (HashMap Text Text)))
-> (Maybe (HashMap Text Text) -> f (Maybe (HashMap Text Text)))
-> UpdateDomainConfig
-> f UpdateDomainConfig
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  (HashMap Text Text)
  (HashMap Text Text)
  (HashMap Text Text)
  (HashMap Text Text)
-> Iso
     (Maybe (HashMap Text Text))
     (Maybe (HashMap Text Text))
     (Maybe (HashMap Text Text))
     (Maybe (HashMap Text Text))
forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping AnIso
  (HashMap Text Text)
  (HashMap Text Text)
  (HashMap Text Text)
  (HashMap Text Text)
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The name of the domain you\'re updating.
updateDomainConfig_domainName :: Lens.Lens' UpdateDomainConfig Prelude.Text
updateDomainConfig_domainName :: (Text -> f Text) -> UpdateDomainConfig -> f UpdateDomainConfig
updateDomainConfig_domainName = (UpdateDomainConfig -> Text)
-> (UpdateDomainConfig -> Text -> UpdateDomainConfig)
-> Lens UpdateDomainConfig UpdateDomainConfig Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfig' {Text
domainName :: Text
$sel:domainName:UpdateDomainConfig' :: UpdateDomainConfig -> Text
domainName} -> Text
domainName) (\s :: UpdateDomainConfig
s@UpdateDomainConfig' {} Text
a -> UpdateDomainConfig
s {$sel:domainName:UpdateDomainConfig' :: Text
domainName = Text
a} :: UpdateDomainConfig)

instance Core.AWSRequest UpdateDomainConfig where
  type
    AWSResponse UpdateDomainConfig =
      UpdateDomainConfigResponse
  request :: UpdateDomainConfig -> Request UpdateDomainConfig
request = Service -> UpdateDomainConfig -> Request UpdateDomainConfig
forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON Service
defaultService
  response :: Logger
-> Service
-> Proxy UpdateDomainConfig
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateDomainConfig)))
response =
    (Int
 -> ResponseHeaders
 -> Object
 -> Either String (AWSResponse UpdateDomainConfig))
-> Logger
-> Service
-> Proxy UpdateDomainConfig
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateDomainConfig)))
forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> Logger
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Int -> DomainConfig -> UpdateDomainConfigResponse
UpdateDomainConfigResponse'
            (Int -> DomainConfig -> UpdateDomainConfigResponse)
-> Either String Int
-> Either String (DomainConfig -> UpdateDomainConfigResponse)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Int -> Either String Int
forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (Int -> Int
forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
            Either String (DomainConfig -> UpdateDomainConfigResponse)
-> Either String DomainConfig
-> Either String UpdateDomainConfigResponse
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Either String DomainConfig
forall a. FromJSON a => Object -> Text -> Either String a
Core..:> Text
"DomainConfig")
      )

instance Prelude.Hashable UpdateDomainConfig

instance Prelude.NFData UpdateDomainConfig

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

instance Core.ToJSON UpdateDomainConfig where
  toJSON :: UpdateDomainConfig -> Value
toJSON UpdateDomainConfig' {Maybe Text
Maybe (HashMap Text Text)
Maybe (HashMap LogType LogPublishingOption)
Maybe CognitoOptions
Maybe EncryptionAtRestOptions
Maybe NodeToNodeEncryptionOptions
Maybe AdvancedSecurityOptionsInput
Maybe SnapshotOptions
Maybe DomainEndpointOptions
Maybe AutoTuneOptions
Maybe VPCOptions
Maybe EBSOptions
Maybe ClusterConfig
Text
domainName :: Text
advancedOptions :: Maybe (HashMap Text Text)
domainEndpointOptions :: Maybe DomainEndpointOptions
vPCOptions :: Maybe VPCOptions
encryptionAtRestOptions :: Maybe EncryptionAtRestOptions
cognitoOptions :: Maybe CognitoOptions
snapshotOptions :: Maybe SnapshotOptions
advancedSecurityOptions :: Maybe AdvancedSecurityOptionsInput
clusterConfig :: Maybe ClusterConfig
logPublishingOptions :: Maybe (HashMap LogType LogPublishingOption)
autoTuneOptions :: Maybe AutoTuneOptions
accessPolicies :: Maybe Text
nodeToNodeEncryptionOptions :: Maybe NodeToNodeEncryptionOptions
eBSOptions :: Maybe EBSOptions
$sel:domainName:UpdateDomainConfig' :: UpdateDomainConfig -> Text
$sel:advancedOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe (HashMap Text Text)
$sel:domainEndpointOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe DomainEndpointOptions
$sel:vPCOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe VPCOptions
$sel:encryptionAtRestOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe EncryptionAtRestOptions
$sel:cognitoOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe CognitoOptions
$sel:snapshotOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe SnapshotOptions
$sel:advancedSecurityOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe AdvancedSecurityOptionsInput
$sel:clusterConfig:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe ClusterConfig
$sel:logPublishingOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe (HashMap LogType LogPublishingOption)
$sel:autoTuneOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe AutoTuneOptions
$sel:accessPolicies:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe Text
$sel:nodeToNodeEncryptionOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe NodeToNodeEncryptionOptions
$sel:eBSOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe EBSOptions
..} =
    [Pair] -> Value
Core.object
      ( [Maybe Pair] -> [Pair]
forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Text
"EBSOptions" Text -> EBSOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (EBSOptions -> Pair) -> Maybe EBSOptions -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe EBSOptions
eBSOptions,
            (Text
"NodeToNodeEncryptionOptions" Text -> NodeToNodeEncryptionOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (NodeToNodeEncryptionOptions -> Pair)
-> Maybe NodeToNodeEncryptionOptions -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe NodeToNodeEncryptionOptions
nodeToNodeEncryptionOptions,
            (Text
"AccessPolicies" Text -> Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (Text -> Pair) -> Maybe Text -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
accessPolicies,
            (Text
"AutoTuneOptions" Text -> AutoTuneOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (AutoTuneOptions -> Pair) -> Maybe AutoTuneOptions -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe AutoTuneOptions
autoTuneOptions,
            (Text
"LogPublishingOptions" Text -> HashMap LogType LogPublishingOption -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (HashMap LogType LogPublishingOption -> Pair)
-> Maybe (HashMap LogType LogPublishingOption) -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap LogType LogPublishingOption)
logPublishingOptions,
            (Text
"ClusterConfig" Text -> ClusterConfig -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (ClusterConfig -> Pair) -> Maybe ClusterConfig -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe ClusterConfig
clusterConfig,
            (Text
"AdvancedSecurityOptions" Text -> AdvancedSecurityOptionsInput -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (AdvancedSecurityOptionsInput -> Pair)
-> Maybe AdvancedSecurityOptionsInput -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe AdvancedSecurityOptionsInput
advancedSecurityOptions,
            (Text
"SnapshotOptions" Text -> SnapshotOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (SnapshotOptions -> Pair) -> Maybe SnapshotOptions -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe SnapshotOptions
snapshotOptions,
            (Text
"CognitoOptions" Text -> CognitoOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (CognitoOptions -> Pair) -> Maybe CognitoOptions -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe CognitoOptions
cognitoOptions,
            (Text
"EncryptionAtRestOptions" Text -> EncryptionAtRestOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (EncryptionAtRestOptions -> Pair)
-> Maybe EncryptionAtRestOptions -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe EncryptionAtRestOptions
encryptionAtRestOptions,
            (Text
"VPCOptions" Text -> VPCOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=) (VPCOptions -> Pair) -> Maybe VPCOptions -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe VPCOptions
vPCOptions,
            (Text
"DomainEndpointOptions" Text -> DomainEndpointOptions -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (DomainEndpointOptions -> Pair)
-> Maybe DomainEndpointOptions -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe DomainEndpointOptions
domainEndpointOptions,
            (Text
"AdvancedOptions" Text -> HashMap Text Text -> Pair
forall kv v. (KeyValue kv, ToJSON v) => Text -> v -> kv
Core..=)
              (HashMap Text Text -> Pair)
-> Maybe (HashMap Text Text) -> Maybe Pair
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap Text Text)
advancedOptions
          ]
      )

instance Core.ToPath UpdateDomainConfig where
  toPath :: UpdateDomainConfig -> ByteString
toPath UpdateDomainConfig' {Maybe Text
Maybe (HashMap Text Text)
Maybe (HashMap LogType LogPublishingOption)
Maybe CognitoOptions
Maybe EncryptionAtRestOptions
Maybe NodeToNodeEncryptionOptions
Maybe AdvancedSecurityOptionsInput
Maybe SnapshotOptions
Maybe DomainEndpointOptions
Maybe AutoTuneOptions
Maybe VPCOptions
Maybe EBSOptions
Maybe ClusterConfig
Text
domainName :: Text
advancedOptions :: Maybe (HashMap Text Text)
domainEndpointOptions :: Maybe DomainEndpointOptions
vPCOptions :: Maybe VPCOptions
encryptionAtRestOptions :: Maybe EncryptionAtRestOptions
cognitoOptions :: Maybe CognitoOptions
snapshotOptions :: Maybe SnapshotOptions
advancedSecurityOptions :: Maybe AdvancedSecurityOptionsInput
clusterConfig :: Maybe ClusterConfig
logPublishingOptions :: Maybe (HashMap LogType LogPublishingOption)
autoTuneOptions :: Maybe AutoTuneOptions
accessPolicies :: Maybe Text
nodeToNodeEncryptionOptions :: Maybe NodeToNodeEncryptionOptions
eBSOptions :: Maybe EBSOptions
$sel:domainName:UpdateDomainConfig' :: UpdateDomainConfig -> Text
$sel:advancedOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe (HashMap Text Text)
$sel:domainEndpointOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe DomainEndpointOptions
$sel:vPCOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe VPCOptions
$sel:encryptionAtRestOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe EncryptionAtRestOptions
$sel:cognitoOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe CognitoOptions
$sel:snapshotOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe SnapshotOptions
$sel:advancedSecurityOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe AdvancedSecurityOptionsInput
$sel:clusterConfig:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe ClusterConfig
$sel:logPublishingOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe (HashMap LogType LogPublishingOption)
$sel:autoTuneOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe AutoTuneOptions
$sel:accessPolicies:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe Text
$sel:nodeToNodeEncryptionOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe NodeToNodeEncryptionOptions
$sel:eBSOptions:UpdateDomainConfig' :: UpdateDomainConfig -> Maybe EBSOptions
..} =
    [ByteString] -> ByteString
forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/2021-01-01/opensearch/domain/",
        Text -> ByteString
forall a. ToByteString a => a -> ByteString
Core.toBS Text
domainName,
        ByteString
"/config"
      ]

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

-- | The result of an @UpdateDomain@ request. Contains the status of the
-- domain being updated.
--
-- /See:/ 'newUpdateDomainConfigResponse' smart constructor.
data UpdateDomainConfigResponse = UpdateDomainConfigResponse'
  { -- | The response's http status code.
    UpdateDomainConfigResponse -> Int
httpStatus :: Prelude.Int,
    -- | The status of the updated domain.
    UpdateDomainConfigResponse -> DomainConfig
domainConfig :: DomainConfig
  }
  deriving (UpdateDomainConfigResponse -> UpdateDomainConfigResponse -> Bool
(UpdateDomainConfigResponse -> UpdateDomainConfigResponse -> Bool)
-> (UpdateDomainConfigResponse
    -> UpdateDomainConfigResponse -> Bool)
-> Eq UpdateDomainConfigResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateDomainConfigResponse -> UpdateDomainConfigResponse -> Bool
$c/= :: UpdateDomainConfigResponse -> UpdateDomainConfigResponse -> Bool
== :: UpdateDomainConfigResponse -> UpdateDomainConfigResponse -> Bool
$c== :: UpdateDomainConfigResponse -> UpdateDomainConfigResponse -> Bool
Prelude.Eq, ReadPrec [UpdateDomainConfigResponse]
ReadPrec UpdateDomainConfigResponse
Int -> ReadS UpdateDomainConfigResponse
ReadS [UpdateDomainConfigResponse]
(Int -> ReadS UpdateDomainConfigResponse)
-> ReadS [UpdateDomainConfigResponse]
-> ReadPrec UpdateDomainConfigResponse
-> ReadPrec [UpdateDomainConfigResponse]
-> Read UpdateDomainConfigResponse
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateDomainConfigResponse]
$creadListPrec :: ReadPrec [UpdateDomainConfigResponse]
readPrec :: ReadPrec UpdateDomainConfigResponse
$creadPrec :: ReadPrec UpdateDomainConfigResponse
readList :: ReadS [UpdateDomainConfigResponse]
$creadList :: ReadS [UpdateDomainConfigResponse]
readsPrec :: Int -> ReadS UpdateDomainConfigResponse
$creadsPrec :: Int -> ReadS UpdateDomainConfigResponse
Prelude.Read, Int -> UpdateDomainConfigResponse -> ShowS
[UpdateDomainConfigResponse] -> ShowS
UpdateDomainConfigResponse -> String
(Int -> UpdateDomainConfigResponse -> ShowS)
-> (UpdateDomainConfigResponse -> String)
-> ([UpdateDomainConfigResponse] -> ShowS)
-> Show UpdateDomainConfigResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateDomainConfigResponse] -> ShowS
$cshowList :: [UpdateDomainConfigResponse] -> ShowS
show :: UpdateDomainConfigResponse -> String
$cshow :: UpdateDomainConfigResponse -> String
showsPrec :: Int -> UpdateDomainConfigResponse -> ShowS
$cshowsPrec :: Int -> UpdateDomainConfigResponse -> ShowS
Prelude.Show, (forall x.
 UpdateDomainConfigResponse -> Rep UpdateDomainConfigResponse x)
-> (forall x.
    Rep UpdateDomainConfigResponse x -> UpdateDomainConfigResponse)
-> Generic UpdateDomainConfigResponse
forall x.
Rep UpdateDomainConfigResponse x -> UpdateDomainConfigResponse
forall x.
UpdateDomainConfigResponse -> Rep UpdateDomainConfigResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateDomainConfigResponse x -> UpdateDomainConfigResponse
$cfrom :: forall x.
UpdateDomainConfigResponse -> Rep UpdateDomainConfigResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateDomainConfigResponse' 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', 'updateDomainConfigResponse_httpStatus' - The response's http status code.
--
-- 'domainConfig', 'updateDomainConfigResponse_domainConfig' - The status of the updated domain.
newUpdateDomainConfigResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'domainConfig'
  DomainConfig ->
  UpdateDomainConfigResponse
newUpdateDomainConfigResponse :: Int -> DomainConfig -> UpdateDomainConfigResponse
newUpdateDomainConfigResponse
  Int
pHttpStatus_
  DomainConfig
pDomainConfig_ =
    UpdateDomainConfigResponse' :: Int -> DomainConfig -> UpdateDomainConfigResponse
UpdateDomainConfigResponse'
      { $sel:httpStatus:UpdateDomainConfigResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:domainConfig:UpdateDomainConfigResponse' :: DomainConfig
domainConfig = DomainConfig
pDomainConfig_
      }

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

-- | The status of the updated domain.
updateDomainConfigResponse_domainConfig :: Lens.Lens' UpdateDomainConfigResponse DomainConfig
updateDomainConfigResponse_domainConfig :: (DomainConfig -> f DomainConfig)
-> UpdateDomainConfigResponse -> f UpdateDomainConfigResponse
updateDomainConfigResponse_domainConfig = (UpdateDomainConfigResponse -> DomainConfig)
-> (UpdateDomainConfigResponse
    -> DomainConfig -> UpdateDomainConfigResponse)
-> Lens
     UpdateDomainConfigResponse
     UpdateDomainConfigResponse
     DomainConfig
     DomainConfig
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateDomainConfigResponse' {DomainConfig
domainConfig :: DomainConfig
$sel:domainConfig:UpdateDomainConfigResponse' :: UpdateDomainConfigResponse -> DomainConfig
domainConfig} -> DomainConfig
domainConfig) (\s :: UpdateDomainConfigResponse
s@UpdateDomainConfigResponse' {} DomainConfig
a -> UpdateDomainConfigResponse
s {$sel:domainConfig:UpdateDomainConfigResponse' :: DomainConfig
domainConfig = DomainConfig
a} :: UpdateDomainConfigResponse)

instance Prelude.NFData UpdateDomainConfigResponse