{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# 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.Types.InstanceStorageConfig
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Connect.Types.InstanceStorageConfig where

import Amazonka.Connect.Types.KinesisFirehoseConfig
import Amazonka.Connect.Types.KinesisStreamConfig
import Amazonka.Connect.Types.KinesisVideoStreamConfig
import Amazonka.Connect.Types.S3Config
import Amazonka.Connect.Types.StorageType
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

-- | The storage configuration for the instance.
--
-- /See:/ 'newInstanceStorageConfig' smart constructor.
data InstanceStorageConfig = InstanceStorageConfig'
  { -- | The existing association identifier that uniquely identifies the
    -- resource type and storage config for the given instance ID.
    InstanceStorageConfig -> Maybe Text
associationId :: Prelude.Maybe Prelude.Text,
    -- | The configuration of the Kinesis Firehose delivery stream.
    InstanceStorageConfig -> Maybe KinesisFirehoseConfig
kinesisFirehoseConfig :: Prelude.Maybe KinesisFirehoseConfig,
    -- | The configuration of the Kinesis data stream.
    InstanceStorageConfig -> Maybe KinesisStreamConfig
kinesisStreamConfig :: Prelude.Maybe KinesisStreamConfig,
    -- | The configuration of the Kinesis video stream.
    InstanceStorageConfig -> Maybe KinesisVideoStreamConfig
kinesisVideoStreamConfig :: Prelude.Maybe KinesisVideoStreamConfig,
    -- | The S3 bucket configuration.
    InstanceStorageConfig -> Maybe S3Config
s3Config :: Prelude.Maybe S3Config,
    -- | A valid storage type.
    InstanceStorageConfig -> StorageType
storageType :: StorageType
  }
  deriving (InstanceStorageConfig -> InstanceStorageConfig -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: InstanceStorageConfig -> InstanceStorageConfig -> Bool
$c/= :: InstanceStorageConfig -> InstanceStorageConfig -> Bool
== :: InstanceStorageConfig -> InstanceStorageConfig -> Bool
$c== :: InstanceStorageConfig -> InstanceStorageConfig -> Bool
Prelude.Eq, ReadPrec [InstanceStorageConfig]
ReadPrec InstanceStorageConfig
Int -> ReadS InstanceStorageConfig
ReadS [InstanceStorageConfig]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [InstanceStorageConfig]
$creadListPrec :: ReadPrec [InstanceStorageConfig]
readPrec :: ReadPrec InstanceStorageConfig
$creadPrec :: ReadPrec InstanceStorageConfig
readList :: ReadS [InstanceStorageConfig]
$creadList :: ReadS [InstanceStorageConfig]
readsPrec :: Int -> ReadS InstanceStorageConfig
$creadsPrec :: Int -> ReadS InstanceStorageConfig
Prelude.Read, Int -> InstanceStorageConfig -> ShowS
[InstanceStorageConfig] -> ShowS
InstanceStorageConfig -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [InstanceStorageConfig] -> ShowS
$cshowList :: [InstanceStorageConfig] -> ShowS
show :: InstanceStorageConfig -> String
$cshow :: InstanceStorageConfig -> String
showsPrec :: Int -> InstanceStorageConfig -> ShowS
$cshowsPrec :: Int -> InstanceStorageConfig -> ShowS
Prelude.Show, forall x. Rep InstanceStorageConfig x -> InstanceStorageConfig
forall x. InstanceStorageConfig -> Rep InstanceStorageConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep InstanceStorageConfig x -> InstanceStorageConfig
$cfrom :: forall x. InstanceStorageConfig -> Rep InstanceStorageConfig x
Prelude.Generic)

-- |
-- Create a value of 'InstanceStorageConfig' 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:
--
-- 'associationId', 'instanceStorageConfig_associationId' - The existing association identifier that uniquely identifies the
-- resource type and storage config for the given instance ID.
--
-- 'kinesisFirehoseConfig', 'instanceStorageConfig_kinesisFirehoseConfig' - The configuration of the Kinesis Firehose delivery stream.
--
-- 'kinesisStreamConfig', 'instanceStorageConfig_kinesisStreamConfig' - The configuration of the Kinesis data stream.
--
-- 'kinesisVideoStreamConfig', 'instanceStorageConfig_kinesisVideoStreamConfig' - The configuration of the Kinesis video stream.
--
-- 's3Config', 'instanceStorageConfig_s3Config' - The S3 bucket configuration.
--
-- 'storageType', 'instanceStorageConfig_storageType' - A valid storage type.
newInstanceStorageConfig ::
  -- | 'storageType'
  StorageType ->
  InstanceStorageConfig
newInstanceStorageConfig :: StorageType -> InstanceStorageConfig
newInstanceStorageConfig StorageType
pStorageType_ =
  InstanceStorageConfig'
    { $sel:associationId:InstanceStorageConfig' :: Maybe Text
associationId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:kinesisFirehoseConfig:InstanceStorageConfig' :: Maybe KinesisFirehoseConfig
kinesisFirehoseConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:kinesisStreamConfig:InstanceStorageConfig' :: Maybe KinesisStreamConfig
kinesisStreamConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:kinesisVideoStreamConfig:InstanceStorageConfig' :: Maybe KinesisVideoStreamConfig
kinesisVideoStreamConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:s3Config:InstanceStorageConfig' :: Maybe S3Config
s3Config = forall a. Maybe a
Prelude.Nothing,
      $sel:storageType:InstanceStorageConfig' :: StorageType
storageType = StorageType
pStorageType_
    }

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

-- | The configuration of the Kinesis Firehose delivery stream.
instanceStorageConfig_kinesisFirehoseConfig :: Lens.Lens' InstanceStorageConfig (Prelude.Maybe KinesisFirehoseConfig)
instanceStorageConfig_kinesisFirehoseConfig :: Lens' InstanceStorageConfig (Maybe KinesisFirehoseConfig)
instanceStorageConfig_kinesisFirehoseConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStorageConfig' {Maybe KinesisFirehoseConfig
kinesisFirehoseConfig :: Maybe KinesisFirehoseConfig
$sel:kinesisFirehoseConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisFirehoseConfig
kinesisFirehoseConfig} -> Maybe KinesisFirehoseConfig
kinesisFirehoseConfig) (\s :: InstanceStorageConfig
s@InstanceStorageConfig' {} Maybe KinesisFirehoseConfig
a -> InstanceStorageConfig
s {$sel:kinesisFirehoseConfig:InstanceStorageConfig' :: Maybe KinesisFirehoseConfig
kinesisFirehoseConfig = Maybe KinesisFirehoseConfig
a} :: InstanceStorageConfig)

-- | The configuration of the Kinesis data stream.
instanceStorageConfig_kinesisStreamConfig :: Lens.Lens' InstanceStorageConfig (Prelude.Maybe KinesisStreamConfig)
instanceStorageConfig_kinesisStreamConfig :: Lens' InstanceStorageConfig (Maybe KinesisStreamConfig)
instanceStorageConfig_kinesisStreamConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStorageConfig' {Maybe KinesisStreamConfig
kinesisStreamConfig :: Maybe KinesisStreamConfig
$sel:kinesisStreamConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisStreamConfig
kinesisStreamConfig} -> Maybe KinesisStreamConfig
kinesisStreamConfig) (\s :: InstanceStorageConfig
s@InstanceStorageConfig' {} Maybe KinesisStreamConfig
a -> InstanceStorageConfig
s {$sel:kinesisStreamConfig:InstanceStorageConfig' :: Maybe KinesisStreamConfig
kinesisStreamConfig = Maybe KinesisStreamConfig
a} :: InstanceStorageConfig)

-- | The configuration of the Kinesis video stream.
instanceStorageConfig_kinesisVideoStreamConfig :: Lens.Lens' InstanceStorageConfig (Prelude.Maybe KinesisVideoStreamConfig)
instanceStorageConfig_kinesisVideoStreamConfig :: Lens' InstanceStorageConfig (Maybe KinesisVideoStreamConfig)
instanceStorageConfig_kinesisVideoStreamConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStorageConfig' {Maybe KinesisVideoStreamConfig
kinesisVideoStreamConfig :: Maybe KinesisVideoStreamConfig
$sel:kinesisVideoStreamConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisVideoStreamConfig
kinesisVideoStreamConfig} -> Maybe KinesisVideoStreamConfig
kinesisVideoStreamConfig) (\s :: InstanceStorageConfig
s@InstanceStorageConfig' {} Maybe KinesisVideoStreamConfig
a -> InstanceStorageConfig
s {$sel:kinesisVideoStreamConfig:InstanceStorageConfig' :: Maybe KinesisVideoStreamConfig
kinesisVideoStreamConfig = Maybe KinesisVideoStreamConfig
a} :: InstanceStorageConfig)

-- | The S3 bucket configuration.
instanceStorageConfig_s3Config :: Lens.Lens' InstanceStorageConfig (Prelude.Maybe S3Config)
instanceStorageConfig_s3Config :: Lens' InstanceStorageConfig (Maybe S3Config)
instanceStorageConfig_s3Config = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStorageConfig' {Maybe S3Config
s3Config :: Maybe S3Config
$sel:s3Config:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe S3Config
s3Config} -> Maybe S3Config
s3Config) (\s :: InstanceStorageConfig
s@InstanceStorageConfig' {} Maybe S3Config
a -> InstanceStorageConfig
s {$sel:s3Config:InstanceStorageConfig' :: Maybe S3Config
s3Config = Maybe S3Config
a} :: InstanceStorageConfig)

-- | A valid storage type.
instanceStorageConfig_storageType :: Lens.Lens' InstanceStorageConfig StorageType
instanceStorageConfig_storageType :: Lens' InstanceStorageConfig StorageType
instanceStorageConfig_storageType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\InstanceStorageConfig' {StorageType
storageType :: StorageType
$sel:storageType:InstanceStorageConfig' :: InstanceStorageConfig -> StorageType
storageType} -> StorageType
storageType) (\s :: InstanceStorageConfig
s@InstanceStorageConfig' {} StorageType
a -> InstanceStorageConfig
s {$sel:storageType:InstanceStorageConfig' :: StorageType
storageType = StorageType
a} :: InstanceStorageConfig)

instance Data.FromJSON InstanceStorageConfig where
  parseJSON :: Value -> Parser InstanceStorageConfig
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"InstanceStorageConfig"
      ( \Object
x ->
          Maybe Text
-> Maybe KinesisFirehoseConfig
-> Maybe KinesisStreamConfig
-> Maybe KinesisVideoStreamConfig
-> Maybe S3Config
-> StorageType
-> InstanceStorageConfig
InstanceStorageConfig'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"AssociationId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"KinesisFirehoseConfig")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"KinesisStreamConfig")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"KinesisVideoStreamConfig")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"S3Config")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"StorageType")
      )

instance Prelude.Hashable InstanceStorageConfig where
  hashWithSalt :: Int -> InstanceStorageConfig -> Int
hashWithSalt Int
_salt InstanceStorageConfig' {Maybe Text
Maybe KinesisFirehoseConfig
Maybe KinesisStreamConfig
Maybe KinesisVideoStreamConfig
Maybe S3Config
StorageType
storageType :: StorageType
s3Config :: Maybe S3Config
kinesisVideoStreamConfig :: Maybe KinesisVideoStreamConfig
kinesisStreamConfig :: Maybe KinesisStreamConfig
kinesisFirehoseConfig :: Maybe KinesisFirehoseConfig
associationId :: Maybe Text
$sel:storageType:InstanceStorageConfig' :: InstanceStorageConfig -> StorageType
$sel:s3Config:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe S3Config
$sel:kinesisVideoStreamConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisVideoStreamConfig
$sel:kinesisStreamConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisStreamConfig
$sel:kinesisFirehoseConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisFirehoseConfig
$sel:associationId:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
associationId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe KinesisFirehoseConfig
kinesisFirehoseConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe KinesisStreamConfig
kinesisStreamConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe KinesisVideoStreamConfig
kinesisVideoStreamConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe S3Config
s3Config
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` StorageType
storageType

instance Prelude.NFData InstanceStorageConfig where
  rnf :: InstanceStorageConfig -> ()
rnf InstanceStorageConfig' {Maybe Text
Maybe KinesisFirehoseConfig
Maybe KinesisStreamConfig
Maybe KinesisVideoStreamConfig
Maybe S3Config
StorageType
storageType :: StorageType
s3Config :: Maybe S3Config
kinesisVideoStreamConfig :: Maybe KinesisVideoStreamConfig
kinesisStreamConfig :: Maybe KinesisStreamConfig
kinesisFirehoseConfig :: Maybe KinesisFirehoseConfig
associationId :: Maybe Text
$sel:storageType:InstanceStorageConfig' :: InstanceStorageConfig -> StorageType
$sel:s3Config:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe S3Config
$sel:kinesisVideoStreamConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisVideoStreamConfig
$sel:kinesisStreamConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisStreamConfig
$sel:kinesisFirehoseConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisFirehoseConfig
$sel:associationId:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
associationId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe KinesisFirehoseConfig
kinesisFirehoseConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe KinesisStreamConfig
kinesisStreamConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe KinesisVideoStreamConfig
kinesisVideoStreamConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe S3Config
s3Config
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf StorageType
storageType

instance Data.ToJSON InstanceStorageConfig where
  toJSON :: InstanceStorageConfig -> Value
toJSON InstanceStorageConfig' {Maybe Text
Maybe KinesisFirehoseConfig
Maybe KinesisStreamConfig
Maybe KinesisVideoStreamConfig
Maybe S3Config
StorageType
storageType :: StorageType
s3Config :: Maybe S3Config
kinesisVideoStreamConfig :: Maybe KinesisVideoStreamConfig
kinesisStreamConfig :: Maybe KinesisStreamConfig
kinesisFirehoseConfig :: Maybe KinesisFirehoseConfig
associationId :: Maybe Text
$sel:storageType:InstanceStorageConfig' :: InstanceStorageConfig -> StorageType
$sel:s3Config:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe S3Config
$sel:kinesisVideoStreamConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisVideoStreamConfig
$sel:kinesisStreamConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisStreamConfig
$sel:kinesisFirehoseConfig:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe KinesisFirehoseConfig
$sel:associationId:InstanceStorageConfig' :: InstanceStorageConfig -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AssociationId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
associationId,
            (Key
"KinesisFirehoseConfig" 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 KinesisFirehoseConfig
kinesisFirehoseConfig,
            (Key
"KinesisStreamConfig" 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 KinesisStreamConfig
kinesisStreamConfig,
            (Key
"KinesisVideoStreamConfig" 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 KinesisVideoStreamConfig
kinesisVideoStreamConfig,
            (Key
"S3Config" 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 S3Config
s3Config,
            forall a. a -> Maybe a
Prelude.Just (Key
"StorageType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= StorageType
storageType)
          ]
      )