{-# 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.DescribeInstanceStorageConfig
-- 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.
--
-- Retrieves the current storage configurations for the specified resource
-- type, association ID, and instance ID.
module Amazonka.Connect.DescribeInstanceStorageConfig
  ( -- * Creating a Request
    DescribeInstanceStorageConfig (..),
    newDescribeInstanceStorageConfig,

    -- * Request Lenses
    describeInstanceStorageConfig_instanceId,
    describeInstanceStorageConfig_associationId,
    describeInstanceStorageConfig_resourceType,

    -- * Destructuring the Response
    DescribeInstanceStorageConfigResponse (..),
    newDescribeInstanceStorageConfigResponse,

    -- * Response Lenses
    describeInstanceStorageConfigResponse_storageConfig,
    describeInstanceStorageConfigResponse_httpStatus,
  )
where

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

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

-- |
-- Create a value of 'DescribeInstanceStorageConfig' 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', 'describeInstanceStorageConfig_instanceId' - The identifier of the Amazon Connect instance. You can find the
-- instanceId in the ARN of the instance.
--
-- 'associationId', 'describeInstanceStorageConfig_associationId' - The existing association identifier that uniquely identifies the
-- resource type and storage config for the given instance ID.
--
-- 'resourceType', 'describeInstanceStorageConfig_resourceType' - A valid resource type.
newDescribeInstanceStorageConfig ::
  -- | 'instanceId'
  Prelude.Text ->
  -- | 'associationId'
  Prelude.Text ->
  -- | 'resourceType'
  InstanceStorageResourceType ->
  DescribeInstanceStorageConfig
newDescribeInstanceStorageConfig :: Text
-> Text
-> InstanceStorageResourceType
-> DescribeInstanceStorageConfig
newDescribeInstanceStorageConfig
  Text
pInstanceId_
  Text
pAssociationId_
  InstanceStorageResourceType
pResourceType_ =
    DescribeInstanceStorageConfig'
      { $sel:instanceId:DescribeInstanceStorageConfig' :: Text
instanceId =
          Text
pInstanceId_,
        $sel:associationId:DescribeInstanceStorageConfig' :: Text
associationId = Text
pAssociationId_,
        $sel:resourceType:DescribeInstanceStorageConfig' :: InstanceStorageResourceType
resourceType = InstanceStorageResourceType
pResourceType_
      }

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

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

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

instance
  Core.AWSRequest
    DescribeInstanceStorageConfig
  where
  type
    AWSResponse DescribeInstanceStorageConfig =
      DescribeInstanceStorageConfigResponse
  request :: (Service -> Service)
-> DescribeInstanceStorageConfig
-> Request DescribeInstanceStorageConfig
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeInstanceStorageConfig
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeInstanceStorageConfig)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe InstanceStorageConfig
-> Int -> DescribeInstanceStorageConfigResponse
DescribeInstanceStorageConfigResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"StorageConfig")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    DescribeInstanceStorageConfig
  where
  hashWithSalt :: Int -> DescribeInstanceStorageConfig -> Int
hashWithSalt Int
_salt DescribeInstanceStorageConfig' {Text
InstanceStorageResourceType
resourceType :: InstanceStorageResourceType
associationId :: Text
instanceId :: Text
$sel:resourceType:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> InstanceStorageResourceType
$sel:associationId:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> Text
$sel:instanceId:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> 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

instance Prelude.NFData DescribeInstanceStorageConfig where
  rnf :: DescribeInstanceStorageConfig -> ()
rnf DescribeInstanceStorageConfig' {Text
InstanceStorageResourceType
resourceType :: InstanceStorageResourceType
associationId :: Text
instanceId :: Text
$sel:resourceType:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> InstanceStorageResourceType
$sel:associationId:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> Text
$sel:instanceId:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> 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

instance Data.ToHeaders DescribeInstanceStorageConfig where
  toHeaders :: DescribeInstanceStorageConfig -> 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.ToPath DescribeInstanceStorageConfig where
  toPath :: DescribeInstanceStorageConfig -> ByteString
toPath DescribeInstanceStorageConfig' {Text
InstanceStorageResourceType
resourceType :: InstanceStorageResourceType
associationId :: Text
instanceId :: Text
$sel:resourceType:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> InstanceStorageResourceType
$sel:associationId:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> Text
$sel:instanceId:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> 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 DescribeInstanceStorageConfig where
  toQuery :: DescribeInstanceStorageConfig -> QueryString
toQuery DescribeInstanceStorageConfig' {Text
InstanceStorageResourceType
resourceType :: InstanceStorageResourceType
associationId :: Text
instanceId :: Text
$sel:resourceType:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> InstanceStorageResourceType
$sel:associationId:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> Text
$sel:instanceId:DescribeInstanceStorageConfig' :: DescribeInstanceStorageConfig -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"resourceType" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: InstanceStorageResourceType
resourceType]

-- | /See:/ 'newDescribeInstanceStorageConfigResponse' smart constructor.
data DescribeInstanceStorageConfigResponse = DescribeInstanceStorageConfigResponse'
  { -- | A valid storage type.
    DescribeInstanceStorageConfigResponse
-> Maybe InstanceStorageConfig
storageConfig :: Prelude.Maybe InstanceStorageConfig,
    -- | The response's http status code.
    DescribeInstanceStorageConfigResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeInstanceStorageConfigResponse
-> DescribeInstanceStorageConfigResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeInstanceStorageConfigResponse
-> DescribeInstanceStorageConfigResponse -> Bool
$c/= :: DescribeInstanceStorageConfigResponse
-> DescribeInstanceStorageConfigResponse -> Bool
== :: DescribeInstanceStorageConfigResponse
-> DescribeInstanceStorageConfigResponse -> Bool
$c== :: DescribeInstanceStorageConfigResponse
-> DescribeInstanceStorageConfigResponse -> Bool
Prelude.Eq, ReadPrec [DescribeInstanceStorageConfigResponse]
ReadPrec DescribeInstanceStorageConfigResponse
Int -> ReadS DescribeInstanceStorageConfigResponse
ReadS [DescribeInstanceStorageConfigResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeInstanceStorageConfigResponse]
$creadListPrec :: ReadPrec [DescribeInstanceStorageConfigResponse]
readPrec :: ReadPrec DescribeInstanceStorageConfigResponse
$creadPrec :: ReadPrec DescribeInstanceStorageConfigResponse
readList :: ReadS [DescribeInstanceStorageConfigResponse]
$creadList :: ReadS [DescribeInstanceStorageConfigResponse]
readsPrec :: Int -> ReadS DescribeInstanceStorageConfigResponse
$creadsPrec :: Int -> ReadS DescribeInstanceStorageConfigResponse
Prelude.Read, Int -> DescribeInstanceStorageConfigResponse -> ShowS
[DescribeInstanceStorageConfigResponse] -> ShowS
DescribeInstanceStorageConfigResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeInstanceStorageConfigResponse] -> ShowS
$cshowList :: [DescribeInstanceStorageConfigResponse] -> ShowS
show :: DescribeInstanceStorageConfigResponse -> String
$cshow :: DescribeInstanceStorageConfigResponse -> String
showsPrec :: Int -> DescribeInstanceStorageConfigResponse -> ShowS
$cshowsPrec :: Int -> DescribeInstanceStorageConfigResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeInstanceStorageConfigResponse x
-> DescribeInstanceStorageConfigResponse
forall x.
DescribeInstanceStorageConfigResponse
-> Rep DescribeInstanceStorageConfigResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeInstanceStorageConfigResponse x
-> DescribeInstanceStorageConfigResponse
$cfrom :: forall x.
DescribeInstanceStorageConfigResponse
-> Rep DescribeInstanceStorageConfigResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeInstanceStorageConfigResponse' 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:
--
-- 'storageConfig', 'describeInstanceStorageConfigResponse_storageConfig' - A valid storage type.
--
-- 'httpStatus', 'describeInstanceStorageConfigResponse_httpStatus' - The response's http status code.
newDescribeInstanceStorageConfigResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeInstanceStorageConfigResponse
newDescribeInstanceStorageConfigResponse :: Int -> DescribeInstanceStorageConfigResponse
newDescribeInstanceStorageConfigResponse Int
pHttpStatus_ =
  DescribeInstanceStorageConfigResponse'
    { $sel:storageConfig:DescribeInstanceStorageConfigResponse' :: Maybe InstanceStorageConfig
storageConfig =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeInstanceStorageConfigResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | A valid storage type.
describeInstanceStorageConfigResponse_storageConfig :: Lens.Lens' DescribeInstanceStorageConfigResponse (Prelude.Maybe InstanceStorageConfig)
describeInstanceStorageConfigResponse_storageConfig :: Lens'
  DescribeInstanceStorageConfigResponse (Maybe InstanceStorageConfig)
describeInstanceStorageConfigResponse_storageConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeInstanceStorageConfigResponse' {Maybe InstanceStorageConfig
storageConfig :: Maybe InstanceStorageConfig
$sel:storageConfig:DescribeInstanceStorageConfigResponse' :: DescribeInstanceStorageConfigResponse
-> Maybe InstanceStorageConfig
storageConfig} -> Maybe InstanceStorageConfig
storageConfig) (\s :: DescribeInstanceStorageConfigResponse
s@DescribeInstanceStorageConfigResponse' {} Maybe InstanceStorageConfig
a -> DescribeInstanceStorageConfigResponse
s {$sel:storageConfig:DescribeInstanceStorageConfigResponse' :: Maybe InstanceStorageConfig
storageConfig = Maybe InstanceStorageConfig
a} :: DescribeInstanceStorageConfigResponse)

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

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