{-# 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.UpdateInstanceStorageConfig
-- 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.
--
-- Updates an existing configuration for a resource type. This API is
-- idempotent.
module Amazonka.Connect.UpdateInstanceStorageConfig
  ( -- * Creating a Request
    UpdateInstanceStorageConfig (..),
    newUpdateInstanceStorageConfig,

    -- * Request Lenses
    updateInstanceStorageConfig_instanceId,
    updateInstanceStorageConfig_associationId,
    updateInstanceStorageConfig_resourceType,
    updateInstanceStorageConfig_storageConfig,

    -- * Destructuring the Response
    UpdateInstanceStorageConfigResponse (..),
    newUpdateInstanceStorageConfigResponse,
  )
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:/ 'newUpdateInstanceStorageConfig' smart constructor.
data UpdateInstanceStorageConfig = UpdateInstanceStorageConfig'
  { -- | The identifier of the Amazon Connect instance. You can find the
    -- instanceId in the ARN of the instance.
    UpdateInstanceStorageConfig -> Text
instanceId :: Prelude.Text,
    -- | The existing association identifier that uniquely identifies the
    -- resource type and storage config for the given instance ID.
    UpdateInstanceStorageConfig -> Text
associationId :: Prelude.Text,
    -- | A valid resource type.
    UpdateInstanceStorageConfig -> InstanceStorageResourceType
resourceType :: InstanceStorageResourceType,
    UpdateInstanceStorageConfig -> InstanceStorageConfig
storageConfig :: InstanceStorageConfig
  }
  deriving (UpdateInstanceStorageConfig -> UpdateInstanceStorageConfig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateInstanceStorageConfig -> UpdateInstanceStorageConfig -> Bool
$c/= :: UpdateInstanceStorageConfig -> UpdateInstanceStorageConfig -> Bool
== :: UpdateInstanceStorageConfig -> UpdateInstanceStorageConfig -> Bool
$c== :: UpdateInstanceStorageConfig -> UpdateInstanceStorageConfig -> Bool
Prelude.Eq, ReadPrec [UpdateInstanceStorageConfig]
ReadPrec UpdateInstanceStorageConfig
Int -> ReadS UpdateInstanceStorageConfig
ReadS [UpdateInstanceStorageConfig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateInstanceStorageConfig]
$creadListPrec :: ReadPrec [UpdateInstanceStorageConfig]
readPrec :: ReadPrec UpdateInstanceStorageConfig
$creadPrec :: ReadPrec UpdateInstanceStorageConfig
readList :: ReadS [UpdateInstanceStorageConfig]
$creadList :: ReadS [UpdateInstanceStorageConfig]
readsPrec :: Int -> ReadS UpdateInstanceStorageConfig
$creadsPrec :: Int -> ReadS UpdateInstanceStorageConfig
Prelude.Read, Int -> UpdateInstanceStorageConfig -> ShowS
[UpdateInstanceStorageConfig] -> ShowS
UpdateInstanceStorageConfig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateInstanceStorageConfig] -> ShowS
$cshowList :: [UpdateInstanceStorageConfig] -> ShowS
show :: UpdateInstanceStorageConfig -> String
$cshow :: UpdateInstanceStorageConfig -> String
showsPrec :: Int -> UpdateInstanceStorageConfig -> ShowS
$cshowsPrec :: Int -> UpdateInstanceStorageConfig -> ShowS
Prelude.Show, forall x.
Rep UpdateInstanceStorageConfig x -> UpdateInstanceStorageConfig
forall x.
UpdateInstanceStorageConfig -> Rep UpdateInstanceStorageConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateInstanceStorageConfig x -> UpdateInstanceStorageConfig
$cfrom :: forall x.
UpdateInstanceStorageConfig -> Rep UpdateInstanceStorageConfig x
Prelude.Generic)

-- |
-- Create a value of 'UpdateInstanceStorageConfig' 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:
--
-- 'instanceId', 'updateInstanceStorageConfig_instanceId' - The identifier of the Amazon Connect instance. You can find the
-- instanceId in the ARN of the instance.
--
-- 'associationId', 'updateInstanceStorageConfig_associationId' - The existing association identifier that uniquely identifies the
-- resource type and storage config for the given instance ID.
--
-- 'resourceType', 'updateInstanceStorageConfig_resourceType' - A valid resource type.
--
-- 'storageConfig', 'updateInstanceStorageConfig_storageConfig' - Undocumented member.
newUpdateInstanceStorageConfig ::
  -- | 'instanceId'
  Prelude.Text ->
  -- | 'associationId'
  Prelude.Text ->
  -- | 'resourceType'
  InstanceStorageResourceType ->
  -- | 'storageConfig'
  InstanceStorageConfig ->
  UpdateInstanceStorageConfig
newUpdateInstanceStorageConfig :: Text
-> Text
-> InstanceStorageResourceType
-> InstanceStorageConfig
-> UpdateInstanceStorageConfig
newUpdateInstanceStorageConfig
  Text
pInstanceId_
  Text
pAssociationId_
  InstanceStorageResourceType
pResourceType_
  InstanceStorageConfig
pStorageConfig_ =
    UpdateInstanceStorageConfig'
      { $sel:instanceId:UpdateInstanceStorageConfig' :: Text
instanceId =
          Text
pInstanceId_,
        $sel:associationId:UpdateInstanceStorageConfig' :: Text
associationId = Text
pAssociationId_,
        $sel:resourceType:UpdateInstanceStorageConfig' :: InstanceStorageResourceType
resourceType = InstanceStorageResourceType
pResourceType_,
        $sel:storageConfig:UpdateInstanceStorageConfig' :: InstanceStorageConfig
storageConfig = InstanceStorageConfig
pStorageConfig_
      }

-- | The identifier of the Amazon Connect instance. You can find the
-- instanceId in the ARN of the instance.
updateInstanceStorageConfig_instanceId :: Lens.Lens' UpdateInstanceStorageConfig Prelude.Text
updateInstanceStorageConfig_instanceId :: Lens' UpdateInstanceStorageConfig Text
updateInstanceStorageConfig_instanceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateInstanceStorageConfig' {Text
instanceId :: Text
$sel:instanceId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
instanceId} -> Text
instanceId) (\s :: UpdateInstanceStorageConfig
s@UpdateInstanceStorageConfig' {} Text
a -> UpdateInstanceStorageConfig
s {$sel:instanceId:UpdateInstanceStorageConfig' :: Text
instanceId = Text
a} :: UpdateInstanceStorageConfig)

-- | The existing association identifier that uniquely identifies the
-- resource type and storage config for the given instance ID.
updateInstanceStorageConfig_associationId :: Lens.Lens' UpdateInstanceStorageConfig Prelude.Text
updateInstanceStorageConfig_associationId :: Lens' UpdateInstanceStorageConfig Text
updateInstanceStorageConfig_associationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateInstanceStorageConfig' {Text
associationId :: Text
$sel:associationId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
associationId} -> Text
associationId) (\s :: UpdateInstanceStorageConfig
s@UpdateInstanceStorageConfig' {} Text
a -> UpdateInstanceStorageConfig
s {$sel:associationId:UpdateInstanceStorageConfig' :: Text
associationId = Text
a} :: UpdateInstanceStorageConfig)

-- | A valid resource type.
updateInstanceStorageConfig_resourceType :: Lens.Lens' UpdateInstanceStorageConfig InstanceStorageResourceType
updateInstanceStorageConfig_resourceType :: Lens' UpdateInstanceStorageConfig InstanceStorageResourceType
updateInstanceStorageConfig_resourceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateInstanceStorageConfig' {InstanceStorageResourceType
resourceType :: InstanceStorageResourceType
$sel:resourceType:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageResourceType
resourceType} -> InstanceStorageResourceType
resourceType) (\s :: UpdateInstanceStorageConfig
s@UpdateInstanceStorageConfig' {} InstanceStorageResourceType
a -> UpdateInstanceStorageConfig
s {$sel:resourceType:UpdateInstanceStorageConfig' :: InstanceStorageResourceType
resourceType = InstanceStorageResourceType
a} :: UpdateInstanceStorageConfig)

-- | Undocumented member.
updateInstanceStorageConfig_storageConfig :: Lens.Lens' UpdateInstanceStorageConfig InstanceStorageConfig
updateInstanceStorageConfig_storageConfig :: Lens' UpdateInstanceStorageConfig InstanceStorageConfig
updateInstanceStorageConfig_storageConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateInstanceStorageConfig' {InstanceStorageConfig
storageConfig :: InstanceStorageConfig
$sel:storageConfig:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageConfig
storageConfig} -> InstanceStorageConfig
storageConfig) (\s :: UpdateInstanceStorageConfig
s@UpdateInstanceStorageConfig' {} InstanceStorageConfig
a -> UpdateInstanceStorageConfig
s {$sel:storageConfig:UpdateInstanceStorageConfig' :: InstanceStorageConfig
storageConfig = InstanceStorageConfig
a} :: UpdateInstanceStorageConfig)

instance Core.AWSRequest UpdateInstanceStorageConfig where
  type
    AWSResponse UpdateInstanceStorageConfig =
      UpdateInstanceStorageConfigResponse
  request :: (Service -> Service)
-> UpdateInstanceStorageConfig
-> Request UpdateInstanceStorageConfig
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateInstanceStorageConfig
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateInstanceStorageConfig)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull
      UpdateInstanceStorageConfigResponse
UpdateInstanceStorageConfigResponse'

instance Prelude.Hashable UpdateInstanceStorageConfig where
  hashWithSalt :: Int -> UpdateInstanceStorageConfig -> Int
hashWithSalt Int
_salt UpdateInstanceStorageConfig' {Text
InstanceStorageResourceType
InstanceStorageConfig
storageConfig :: InstanceStorageConfig
resourceType :: InstanceStorageResourceType
associationId :: Text
instanceId :: Text
$sel:storageConfig:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageConfig
$sel:resourceType:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageResourceType
$sel:associationId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
$sel:instanceId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
instanceId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
associationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` InstanceStorageResourceType
resourceType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` InstanceStorageConfig
storageConfig

instance Prelude.NFData UpdateInstanceStorageConfig where
  rnf :: UpdateInstanceStorageConfig -> ()
rnf UpdateInstanceStorageConfig' {Text
InstanceStorageResourceType
InstanceStorageConfig
storageConfig :: InstanceStorageConfig
resourceType :: InstanceStorageResourceType
associationId :: Text
instanceId :: Text
$sel:storageConfig:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageConfig
$sel:resourceType:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageResourceType
$sel:associationId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
$sel:instanceId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
instanceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
associationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf InstanceStorageResourceType
resourceType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf InstanceStorageConfig
storageConfig

instance Data.ToHeaders UpdateInstanceStorageConfig where
  toHeaders :: UpdateInstanceStorageConfig -> [Header]
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 -> [Header]
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON UpdateInstanceStorageConfig where
  toJSON :: UpdateInstanceStorageConfig -> Value
toJSON UpdateInstanceStorageConfig' {Text
InstanceStorageResourceType
InstanceStorageConfig
storageConfig :: InstanceStorageConfig
resourceType :: InstanceStorageResourceType
associationId :: Text
instanceId :: Text
$sel:storageConfig:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageConfig
$sel:resourceType:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageResourceType
$sel:associationId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
$sel:instanceId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"StorageConfig" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= InstanceStorageConfig
storageConfig)
          ]
      )

instance Data.ToPath UpdateInstanceStorageConfig where
  toPath :: UpdateInstanceStorageConfig -> ByteString
toPath UpdateInstanceStorageConfig' {Text
InstanceStorageResourceType
InstanceStorageConfig
storageConfig :: InstanceStorageConfig
resourceType :: InstanceStorageResourceType
associationId :: Text
instanceId :: Text
$sel:storageConfig:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageConfig
$sel:resourceType:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageResourceType
$sel:associationId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
$sel:instanceId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/instance/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
instanceId,
        ByteString
"/storage-config/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
associationId
      ]

instance Data.ToQuery UpdateInstanceStorageConfig where
  toQuery :: UpdateInstanceStorageConfig -> QueryString
toQuery UpdateInstanceStorageConfig' {Text
InstanceStorageResourceType
InstanceStorageConfig
storageConfig :: InstanceStorageConfig
resourceType :: InstanceStorageResourceType
associationId :: Text
instanceId :: Text
$sel:storageConfig:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageConfig
$sel:resourceType:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> InstanceStorageResourceType
$sel:associationId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
$sel:instanceId:UpdateInstanceStorageConfig' :: UpdateInstanceStorageConfig -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"resourceType" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: InstanceStorageResourceType
resourceType]

-- | /See:/ 'newUpdateInstanceStorageConfigResponse' smart constructor.
data UpdateInstanceStorageConfigResponse = UpdateInstanceStorageConfigResponse'
  {
  }
  deriving (UpdateInstanceStorageConfigResponse
-> UpdateInstanceStorageConfigResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateInstanceStorageConfigResponse
-> UpdateInstanceStorageConfigResponse -> Bool
$c/= :: UpdateInstanceStorageConfigResponse
-> UpdateInstanceStorageConfigResponse -> Bool
== :: UpdateInstanceStorageConfigResponse
-> UpdateInstanceStorageConfigResponse -> Bool
$c== :: UpdateInstanceStorageConfigResponse
-> UpdateInstanceStorageConfigResponse -> Bool
Prelude.Eq, ReadPrec [UpdateInstanceStorageConfigResponse]
ReadPrec UpdateInstanceStorageConfigResponse
Int -> ReadS UpdateInstanceStorageConfigResponse
ReadS [UpdateInstanceStorageConfigResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateInstanceStorageConfigResponse]
$creadListPrec :: ReadPrec [UpdateInstanceStorageConfigResponse]
readPrec :: ReadPrec UpdateInstanceStorageConfigResponse
$creadPrec :: ReadPrec UpdateInstanceStorageConfigResponse
readList :: ReadS [UpdateInstanceStorageConfigResponse]
$creadList :: ReadS [UpdateInstanceStorageConfigResponse]
readsPrec :: Int -> ReadS UpdateInstanceStorageConfigResponse
$creadsPrec :: Int -> ReadS UpdateInstanceStorageConfigResponse
Prelude.Read, Int -> UpdateInstanceStorageConfigResponse -> ShowS
[UpdateInstanceStorageConfigResponse] -> ShowS
UpdateInstanceStorageConfigResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateInstanceStorageConfigResponse] -> ShowS
$cshowList :: [UpdateInstanceStorageConfigResponse] -> ShowS
show :: UpdateInstanceStorageConfigResponse -> String
$cshow :: UpdateInstanceStorageConfigResponse -> String
showsPrec :: Int -> UpdateInstanceStorageConfigResponse -> ShowS
$cshowsPrec :: Int -> UpdateInstanceStorageConfigResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateInstanceStorageConfigResponse x
-> UpdateInstanceStorageConfigResponse
forall x.
UpdateInstanceStorageConfigResponse
-> Rep UpdateInstanceStorageConfigResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateInstanceStorageConfigResponse x
-> UpdateInstanceStorageConfigResponse
$cfrom :: forall x.
UpdateInstanceStorageConfigResponse
-> Rep UpdateInstanceStorageConfigResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateInstanceStorageConfigResponse' 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.
newUpdateInstanceStorageConfigResponse ::
  UpdateInstanceStorageConfigResponse
newUpdateInstanceStorageConfigResponse :: UpdateInstanceStorageConfigResponse
newUpdateInstanceStorageConfigResponse =
  UpdateInstanceStorageConfigResponse
UpdateInstanceStorageConfigResponse'

instance
  Prelude.NFData
    UpdateInstanceStorageConfigResponse
  where
  rnf :: UpdateInstanceStorageConfigResponse -> ()
rnf UpdateInstanceStorageConfigResponse
_ = ()