{-# 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.Kendra.Types.DatabaseConfiguration
-- 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.Kendra.Types.DatabaseConfiguration where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Kendra.Types.AclConfiguration
import Amazonka.Kendra.Types.ColumnConfiguration
import Amazonka.Kendra.Types.ConnectionConfiguration
import Amazonka.Kendra.Types.DataSourceVpcConfiguration
import Amazonka.Kendra.Types.DatabaseEngineType
import Amazonka.Kendra.Types.SqlConfiguration
import qualified Amazonka.Prelude as Prelude

-- | Provides the configuration information to connect to a index.
--
-- /See:/ 'newDatabaseConfiguration' smart constructor.
data DatabaseConfiguration = DatabaseConfiguration'
  { -- | Information about the database column that provides information for user
    -- context filtering.
    DatabaseConfiguration -> Maybe AclConfiguration
aclConfiguration :: Prelude.Maybe AclConfiguration,
    -- | Provides information about how Amazon Kendra uses quote marks around SQL
    -- identifiers when querying a database data source.
    DatabaseConfiguration -> Maybe SqlConfiguration
sqlConfiguration :: Prelude.Maybe SqlConfiguration,
    DatabaseConfiguration -> Maybe DataSourceVpcConfiguration
vpcConfiguration :: Prelude.Maybe DataSourceVpcConfiguration,
    -- | The type of database engine that runs the database.
    DatabaseConfiguration -> DatabaseEngineType
databaseEngineType :: DatabaseEngineType,
    -- | Configuration information that\'s required to connect to a database.
    DatabaseConfiguration -> ConnectionConfiguration
connectionConfiguration :: ConnectionConfiguration,
    -- | Information about where the index should get the document information
    -- from the database.
    DatabaseConfiguration -> ColumnConfiguration
columnConfiguration :: ColumnConfiguration
  }
  deriving (DatabaseConfiguration -> DatabaseConfiguration -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DatabaseConfiguration -> DatabaseConfiguration -> Bool
$c/= :: DatabaseConfiguration -> DatabaseConfiguration -> Bool
== :: DatabaseConfiguration -> DatabaseConfiguration -> Bool
$c== :: DatabaseConfiguration -> DatabaseConfiguration -> Bool
Prelude.Eq, ReadPrec [DatabaseConfiguration]
ReadPrec DatabaseConfiguration
Int -> ReadS DatabaseConfiguration
ReadS [DatabaseConfiguration]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DatabaseConfiguration]
$creadListPrec :: ReadPrec [DatabaseConfiguration]
readPrec :: ReadPrec DatabaseConfiguration
$creadPrec :: ReadPrec DatabaseConfiguration
readList :: ReadS [DatabaseConfiguration]
$creadList :: ReadS [DatabaseConfiguration]
readsPrec :: Int -> ReadS DatabaseConfiguration
$creadsPrec :: Int -> ReadS DatabaseConfiguration
Prelude.Read, Int -> DatabaseConfiguration -> ShowS
[DatabaseConfiguration] -> ShowS
DatabaseConfiguration -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DatabaseConfiguration] -> ShowS
$cshowList :: [DatabaseConfiguration] -> ShowS
show :: DatabaseConfiguration -> String
$cshow :: DatabaseConfiguration -> String
showsPrec :: Int -> DatabaseConfiguration -> ShowS
$cshowsPrec :: Int -> DatabaseConfiguration -> ShowS
Prelude.Show, forall x. Rep DatabaseConfiguration x -> DatabaseConfiguration
forall x. DatabaseConfiguration -> Rep DatabaseConfiguration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DatabaseConfiguration x -> DatabaseConfiguration
$cfrom :: forall x. DatabaseConfiguration -> Rep DatabaseConfiguration x
Prelude.Generic)

-- |
-- Create a value of 'DatabaseConfiguration' 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:
--
-- 'aclConfiguration', 'databaseConfiguration_aclConfiguration' - Information about the database column that provides information for user
-- context filtering.
--
-- 'sqlConfiguration', 'databaseConfiguration_sqlConfiguration' - Provides information about how Amazon Kendra uses quote marks around SQL
-- identifiers when querying a database data source.
--
-- 'vpcConfiguration', 'databaseConfiguration_vpcConfiguration' - Undocumented member.
--
-- 'databaseEngineType', 'databaseConfiguration_databaseEngineType' - The type of database engine that runs the database.
--
-- 'connectionConfiguration', 'databaseConfiguration_connectionConfiguration' - Configuration information that\'s required to connect to a database.
--
-- 'columnConfiguration', 'databaseConfiguration_columnConfiguration' - Information about where the index should get the document information
-- from the database.
newDatabaseConfiguration ::
  -- | 'databaseEngineType'
  DatabaseEngineType ->
  -- | 'connectionConfiguration'
  ConnectionConfiguration ->
  -- | 'columnConfiguration'
  ColumnConfiguration ->
  DatabaseConfiguration
newDatabaseConfiguration :: DatabaseEngineType
-> ConnectionConfiguration
-> ColumnConfiguration
-> DatabaseConfiguration
newDatabaseConfiguration
  DatabaseEngineType
pDatabaseEngineType_
  ConnectionConfiguration
pConnectionConfiguration_
  ColumnConfiguration
pColumnConfiguration_ =
    DatabaseConfiguration'
      { $sel:aclConfiguration:DatabaseConfiguration' :: Maybe AclConfiguration
aclConfiguration =
          forall a. Maybe a
Prelude.Nothing,
        $sel:sqlConfiguration:DatabaseConfiguration' :: Maybe SqlConfiguration
sqlConfiguration = forall a. Maybe a
Prelude.Nothing,
        $sel:vpcConfiguration:DatabaseConfiguration' :: Maybe DataSourceVpcConfiguration
vpcConfiguration = forall a. Maybe a
Prelude.Nothing,
        $sel:databaseEngineType:DatabaseConfiguration' :: DatabaseEngineType
databaseEngineType = DatabaseEngineType
pDatabaseEngineType_,
        $sel:connectionConfiguration:DatabaseConfiguration' :: ConnectionConfiguration
connectionConfiguration = ConnectionConfiguration
pConnectionConfiguration_,
        $sel:columnConfiguration:DatabaseConfiguration' :: ColumnConfiguration
columnConfiguration = ColumnConfiguration
pColumnConfiguration_
      }

-- | Information about the database column that provides information for user
-- context filtering.
databaseConfiguration_aclConfiguration :: Lens.Lens' DatabaseConfiguration (Prelude.Maybe AclConfiguration)
databaseConfiguration_aclConfiguration :: Lens' DatabaseConfiguration (Maybe AclConfiguration)
databaseConfiguration_aclConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatabaseConfiguration' {Maybe AclConfiguration
aclConfiguration :: Maybe AclConfiguration
$sel:aclConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe AclConfiguration
aclConfiguration} -> Maybe AclConfiguration
aclConfiguration) (\s :: DatabaseConfiguration
s@DatabaseConfiguration' {} Maybe AclConfiguration
a -> DatabaseConfiguration
s {$sel:aclConfiguration:DatabaseConfiguration' :: Maybe AclConfiguration
aclConfiguration = Maybe AclConfiguration
a} :: DatabaseConfiguration)

-- | Provides information about how Amazon Kendra uses quote marks around SQL
-- identifiers when querying a database data source.
databaseConfiguration_sqlConfiguration :: Lens.Lens' DatabaseConfiguration (Prelude.Maybe SqlConfiguration)
databaseConfiguration_sqlConfiguration :: Lens' DatabaseConfiguration (Maybe SqlConfiguration)
databaseConfiguration_sqlConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatabaseConfiguration' {Maybe SqlConfiguration
sqlConfiguration :: Maybe SqlConfiguration
$sel:sqlConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe SqlConfiguration
sqlConfiguration} -> Maybe SqlConfiguration
sqlConfiguration) (\s :: DatabaseConfiguration
s@DatabaseConfiguration' {} Maybe SqlConfiguration
a -> DatabaseConfiguration
s {$sel:sqlConfiguration:DatabaseConfiguration' :: Maybe SqlConfiguration
sqlConfiguration = Maybe SqlConfiguration
a} :: DatabaseConfiguration)

-- | Undocumented member.
databaseConfiguration_vpcConfiguration :: Lens.Lens' DatabaseConfiguration (Prelude.Maybe DataSourceVpcConfiguration)
databaseConfiguration_vpcConfiguration :: Lens' DatabaseConfiguration (Maybe DataSourceVpcConfiguration)
databaseConfiguration_vpcConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatabaseConfiguration' {Maybe DataSourceVpcConfiguration
vpcConfiguration :: Maybe DataSourceVpcConfiguration
$sel:vpcConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe DataSourceVpcConfiguration
vpcConfiguration} -> Maybe DataSourceVpcConfiguration
vpcConfiguration) (\s :: DatabaseConfiguration
s@DatabaseConfiguration' {} Maybe DataSourceVpcConfiguration
a -> DatabaseConfiguration
s {$sel:vpcConfiguration:DatabaseConfiguration' :: Maybe DataSourceVpcConfiguration
vpcConfiguration = Maybe DataSourceVpcConfiguration
a} :: DatabaseConfiguration)

-- | The type of database engine that runs the database.
databaseConfiguration_databaseEngineType :: Lens.Lens' DatabaseConfiguration DatabaseEngineType
databaseConfiguration_databaseEngineType :: Lens' DatabaseConfiguration DatabaseEngineType
databaseConfiguration_databaseEngineType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatabaseConfiguration' {DatabaseEngineType
databaseEngineType :: DatabaseEngineType
$sel:databaseEngineType:DatabaseConfiguration' :: DatabaseConfiguration -> DatabaseEngineType
databaseEngineType} -> DatabaseEngineType
databaseEngineType) (\s :: DatabaseConfiguration
s@DatabaseConfiguration' {} DatabaseEngineType
a -> DatabaseConfiguration
s {$sel:databaseEngineType:DatabaseConfiguration' :: DatabaseEngineType
databaseEngineType = DatabaseEngineType
a} :: DatabaseConfiguration)

-- | Configuration information that\'s required to connect to a database.
databaseConfiguration_connectionConfiguration :: Lens.Lens' DatabaseConfiguration ConnectionConfiguration
databaseConfiguration_connectionConfiguration :: Lens' DatabaseConfiguration ConnectionConfiguration
databaseConfiguration_connectionConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatabaseConfiguration' {ConnectionConfiguration
connectionConfiguration :: ConnectionConfiguration
$sel:connectionConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> ConnectionConfiguration
connectionConfiguration} -> ConnectionConfiguration
connectionConfiguration) (\s :: DatabaseConfiguration
s@DatabaseConfiguration' {} ConnectionConfiguration
a -> DatabaseConfiguration
s {$sel:connectionConfiguration:DatabaseConfiguration' :: ConnectionConfiguration
connectionConfiguration = ConnectionConfiguration
a} :: DatabaseConfiguration)

-- | Information about where the index should get the document information
-- from the database.
databaseConfiguration_columnConfiguration :: Lens.Lens' DatabaseConfiguration ColumnConfiguration
databaseConfiguration_columnConfiguration :: Lens' DatabaseConfiguration ColumnConfiguration
databaseConfiguration_columnConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DatabaseConfiguration' {ColumnConfiguration
columnConfiguration :: ColumnConfiguration
$sel:columnConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> ColumnConfiguration
columnConfiguration} -> ColumnConfiguration
columnConfiguration) (\s :: DatabaseConfiguration
s@DatabaseConfiguration' {} ColumnConfiguration
a -> DatabaseConfiguration
s {$sel:columnConfiguration:DatabaseConfiguration' :: ColumnConfiguration
columnConfiguration = ColumnConfiguration
a} :: DatabaseConfiguration)

instance Data.FromJSON DatabaseConfiguration where
  parseJSON :: Value -> Parser DatabaseConfiguration
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"DatabaseConfiguration"
      ( \Object
x ->
          Maybe AclConfiguration
-> Maybe SqlConfiguration
-> Maybe DataSourceVpcConfiguration
-> DatabaseEngineType
-> ConnectionConfiguration
-> ColumnConfiguration
-> DatabaseConfiguration
DatabaseConfiguration'
            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
"AclConfiguration")
            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
"SqlConfiguration")
            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
"VpcConfiguration")
            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
"DatabaseEngineType")
            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
"ConnectionConfiguration")
            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
"ColumnConfiguration")
      )

instance Prelude.Hashable DatabaseConfiguration where
  hashWithSalt :: Int -> DatabaseConfiguration -> Int
hashWithSalt Int
_salt DatabaseConfiguration' {Maybe AclConfiguration
Maybe DataSourceVpcConfiguration
Maybe SqlConfiguration
ConnectionConfiguration
ColumnConfiguration
DatabaseEngineType
columnConfiguration :: ColumnConfiguration
connectionConfiguration :: ConnectionConfiguration
databaseEngineType :: DatabaseEngineType
vpcConfiguration :: Maybe DataSourceVpcConfiguration
sqlConfiguration :: Maybe SqlConfiguration
aclConfiguration :: Maybe AclConfiguration
$sel:columnConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> ColumnConfiguration
$sel:connectionConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> ConnectionConfiguration
$sel:databaseEngineType:DatabaseConfiguration' :: DatabaseConfiguration -> DatabaseEngineType
$sel:vpcConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe DataSourceVpcConfiguration
$sel:sqlConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe SqlConfiguration
$sel:aclConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe AclConfiguration
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AclConfiguration
aclConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SqlConfiguration
sqlConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DataSourceVpcConfiguration
vpcConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DatabaseEngineType
databaseEngineType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ConnectionConfiguration
connectionConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ColumnConfiguration
columnConfiguration

instance Prelude.NFData DatabaseConfiguration where
  rnf :: DatabaseConfiguration -> ()
rnf DatabaseConfiguration' {Maybe AclConfiguration
Maybe DataSourceVpcConfiguration
Maybe SqlConfiguration
ConnectionConfiguration
ColumnConfiguration
DatabaseEngineType
columnConfiguration :: ColumnConfiguration
connectionConfiguration :: ConnectionConfiguration
databaseEngineType :: DatabaseEngineType
vpcConfiguration :: Maybe DataSourceVpcConfiguration
sqlConfiguration :: Maybe SqlConfiguration
aclConfiguration :: Maybe AclConfiguration
$sel:columnConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> ColumnConfiguration
$sel:connectionConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> ConnectionConfiguration
$sel:databaseEngineType:DatabaseConfiguration' :: DatabaseConfiguration -> DatabaseEngineType
$sel:vpcConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe DataSourceVpcConfiguration
$sel:sqlConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe SqlConfiguration
$sel:aclConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe AclConfiguration
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AclConfiguration
aclConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SqlConfiguration
sqlConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DataSourceVpcConfiguration
vpcConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DatabaseEngineType
databaseEngineType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ConnectionConfiguration
connectionConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ColumnConfiguration
columnConfiguration

instance Data.ToJSON DatabaseConfiguration where
  toJSON :: DatabaseConfiguration -> Value
toJSON DatabaseConfiguration' {Maybe AclConfiguration
Maybe DataSourceVpcConfiguration
Maybe SqlConfiguration
ConnectionConfiguration
ColumnConfiguration
DatabaseEngineType
columnConfiguration :: ColumnConfiguration
connectionConfiguration :: ConnectionConfiguration
databaseEngineType :: DatabaseEngineType
vpcConfiguration :: Maybe DataSourceVpcConfiguration
sqlConfiguration :: Maybe SqlConfiguration
aclConfiguration :: Maybe AclConfiguration
$sel:columnConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> ColumnConfiguration
$sel:connectionConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> ConnectionConfiguration
$sel:databaseEngineType:DatabaseConfiguration' :: DatabaseConfiguration -> DatabaseEngineType
$sel:vpcConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe DataSourceVpcConfiguration
$sel:sqlConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe SqlConfiguration
$sel:aclConfiguration:DatabaseConfiguration' :: DatabaseConfiguration -> Maybe AclConfiguration
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AclConfiguration" 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 AclConfiguration
aclConfiguration,
            (Key
"SqlConfiguration" 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 SqlConfiguration
sqlConfiguration,
            (Key
"VpcConfiguration" 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 DataSourceVpcConfiguration
vpcConfiguration,
            forall a. a -> Maybe a
Prelude.Just
              (Key
"DatabaseEngineType" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= DatabaseEngineType
databaseEngineType),
            forall a. a -> Maybe a
Prelude.Just
              ( Key
"ConnectionConfiguration"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ConnectionConfiguration
connectionConfiguration
              ),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"ColumnConfiguration" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ColumnConfiguration
columnConfiguration)
          ]
      )