{-# 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.AppSync.CreateDataSource
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a @DataSource@ object.
module Amazonka.AppSync.CreateDataSource
  ( -- * Creating a Request
    CreateDataSource (..),
    newCreateDataSource,

    -- * Request Lenses
    createDataSource_description,
    createDataSource_dynamodbConfig,
    createDataSource_elasticsearchConfig,
    createDataSource_httpConfig,
    createDataSource_lambdaConfig,
    createDataSource_openSearchServiceConfig,
    createDataSource_relationalDatabaseConfig,
    createDataSource_serviceRoleArn,
    createDataSource_apiId,
    createDataSource_name,
    createDataSource_type,

    -- * Destructuring the Response
    CreateDataSourceResponse (..),
    newCreateDataSourceResponse,

    -- * Response Lenses
    createDataSourceResponse_dataSource,
    createDataSourceResponse_httpStatus,
  )
where

import Amazonka.AppSync.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:/ 'newCreateDataSource' smart constructor.
data CreateDataSource = CreateDataSource'
  { -- | A description of the @DataSource@.
    CreateDataSource -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | Amazon DynamoDB settings.
    CreateDataSource -> Maybe DynamodbDataSourceConfig
dynamodbConfig :: Prelude.Maybe DynamodbDataSourceConfig,
    -- | Amazon OpenSearch Service settings.
    --
    -- As of September 2021, Amazon Elasticsearch service is Amazon OpenSearch
    -- Service. This configuration is deprecated. For new data sources, use
    -- CreateDataSourceRequest$openSearchServiceConfig to create an OpenSearch
    -- data source.
    CreateDataSource -> Maybe ElasticsearchDataSourceConfig
elasticsearchConfig :: Prelude.Maybe ElasticsearchDataSourceConfig,
    -- | HTTP endpoint settings.
    CreateDataSource -> Maybe HttpDataSourceConfig
httpConfig :: Prelude.Maybe HttpDataSourceConfig,
    -- | Lambda settings.
    CreateDataSource -> Maybe LambdaDataSourceConfig
lambdaConfig :: Prelude.Maybe LambdaDataSourceConfig,
    -- | Amazon OpenSearch Service settings.
    CreateDataSource -> Maybe OpenSearchServiceDataSourceConfig
openSearchServiceConfig :: Prelude.Maybe OpenSearchServiceDataSourceConfig,
    -- | Relational database settings.
    CreateDataSource -> Maybe RelationalDatabaseDataSourceConfig
relationalDatabaseConfig :: Prelude.Maybe RelationalDatabaseDataSourceConfig,
    -- | The Identity and Access Management (IAM) service role Amazon Resource
    -- Name (ARN) for the data source. The system assumes this role when
    -- accessing the data source.
    CreateDataSource -> Maybe Text
serviceRoleArn :: Prelude.Maybe Prelude.Text,
    -- | The API ID for the GraphQL API for the @DataSource@.
    CreateDataSource -> Text
apiId :: Prelude.Text,
    -- | A user-supplied name for the @DataSource@.
    CreateDataSource -> Text
name :: Prelude.Text,
    -- | The type of the @DataSource@.
    CreateDataSource -> DataSourceType
type' :: DataSourceType
  }
  deriving (CreateDataSource -> CreateDataSource -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateDataSource -> CreateDataSource -> Bool
$c/= :: CreateDataSource -> CreateDataSource -> Bool
== :: CreateDataSource -> CreateDataSource -> Bool
$c== :: CreateDataSource -> CreateDataSource -> Bool
Prelude.Eq, ReadPrec [CreateDataSource]
ReadPrec CreateDataSource
Int -> ReadS CreateDataSource
ReadS [CreateDataSource]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateDataSource]
$creadListPrec :: ReadPrec [CreateDataSource]
readPrec :: ReadPrec CreateDataSource
$creadPrec :: ReadPrec CreateDataSource
readList :: ReadS [CreateDataSource]
$creadList :: ReadS [CreateDataSource]
readsPrec :: Int -> ReadS CreateDataSource
$creadsPrec :: Int -> ReadS CreateDataSource
Prelude.Read, Int -> CreateDataSource -> ShowS
[CreateDataSource] -> ShowS
CreateDataSource -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateDataSource] -> ShowS
$cshowList :: [CreateDataSource] -> ShowS
show :: CreateDataSource -> String
$cshow :: CreateDataSource -> String
showsPrec :: Int -> CreateDataSource -> ShowS
$cshowsPrec :: Int -> CreateDataSource -> ShowS
Prelude.Show, forall x. Rep CreateDataSource x -> CreateDataSource
forall x. CreateDataSource -> Rep CreateDataSource x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateDataSource x -> CreateDataSource
$cfrom :: forall x. CreateDataSource -> Rep CreateDataSource x
Prelude.Generic)

-- |
-- Create a value of 'CreateDataSource' 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:
--
-- 'description', 'createDataSource_description' - A description of the @DataSource@.
--
-- 'dynamodbConfig', 'createDataSource_dynamodbConfig' - Amazon DynamoDB settings.
--
-- 'elasticsearchConfig', 'createDataSource_elasticsearchConfig' - Amazon OpenSearch Service settings.
--
-- As of September 2021, Amazon Elasticsearch service is Amazon OpenSearch
-- Service. This configuration is deprecated. For new data sources, use
-- CreateDataSourceRequest$openSearchServiceConfig to create an OpenSearch
-- data source.
--
-- 'httpConfig', 'createDataSource_httpConfig' - HTTP endpoint settings.
--
-- 'lambdaConfig', 'createDataSource_lambdaConfig' - Lambda settings.
--
-- 'openSearchServiceConfig', 'createDataSource_openSearchServiceConfig' - Amazon OpenSearch Service settings.
--
-- 'relationalDatabaseConfig', 'createDataSource_relationalDatabaseConfig' - Relational database settings.
--
-- 'serviceRoleArn', 'createDataSource_serviceRoleArn' - The Identity and Access Management (IAM) service role Amazon Resource
-- Name (ARN) for the data source. The system assumes this role when
-- accessing the data source.
--
-- 'apiId', 'createDataSource_apiId' - The API ID for the GraphQL API for the @DataSource@.
--
-- 'name', 'createDataSource_name' - A user-supplied name for the @DataSource@.
--
-- 'type'', 'createDataSource_type' - The type of the @DataSource@.
newCreateDataSource ::
  -- | 'apiId'
  Prelude.Text ->
  -- | 'name'
  Prelude.Text ->
  -- | 'type''
  DataSourceType ->
  CreateDataSource
newCreateDataSource :: Text -> Text -> DataSourceType -> CreateDataSource
newCreateDataSource Text
pApiId_ Text
pName_ DataSourceType
pType_ =
  CreateDataSource'
    { $sel:description:CreateDataSource' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:dynamodbConfig:CreateDataSource' :: Maybe DynamodbDataSourceConfig
dynamodbConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:elasticsearchConfig:CreateDataSource' :: Maybe ElasticsearchDataSourceConfig
elasticsearchConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:httpConfig:CreateDataSource' :: Maybe HttpDataSourceConfig
httpConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:lambdaConfig:CreateDataSource' :: Maybe LambdaDataSourceConfig
lambdaConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:openSearchServiceConfig:CreateDataSource' :: Maybe OpenSearchServiceDataSourceConfig
openSearchServiceConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:relationalDatabaseConfig:CreateDataSource' :: Maybe RelationalDatabaseDataSourceConfig
relationalDatabaseConfig = forall a. Maybe a
Prelude.Nothing,
      $sel:serviceRoleArn:CreateDataSource' :: Maybe Text
serviceRoleArn = forall a. Maybe a
Prelude.Nothing,
      $sel:apiId:CreateDataSource' :: Text
apiId = Text
pApiId_,
      $sel:name:CreateDataSource' :: Text
name = Text
pName_,
      $sel:type':CreateDataSource' :: DataSourceType
type' = DataSourceType
pType_
    }

-- | A description of the @DataSource@.
createDataSource_description :: Lens.Lens' CreateDataSource (Prelude.Maybe Prelude.Text)
createDataSource_description :: Lens' CreateDataSource (Maybe Text)
createDataSource_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSource' {Maybe Text
description :: Maybe Text
$sel:description:CreateDataSource' :: CreateDataSource -> Maybe Text
description} -> Maybe Text
description) (\s :: CreateDataSource
s@CreateDataSource' {} Maybe Text
a -> CreateDataSource
s {$sel:description:CreateDataSource' :: Maybe Text
description = Maybe Text
a} :: CreateDataSource)

-- | Amazon DynamoDB settings.
createDataSource_dynamodbConfig :: Lens.Lens' CreateDataSource (Prelude.Maybe DynamodbDataSourceConfig)
createDataSource_dynamodbConfig :: Lens' CreateDataSource (Maybe DynamodbDataSourceConfig)
createDataSource_dynamodbConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSource' {Maybe DynamodbDataSourceConfig
dynamodbConfig :: Maybe DynamodbDataSourceConfig
$sel:dynamodbConfig:CreateDataSource' :: CreateDataSource -> Maybe DynamodbDataSourceConfig
dynamodbConfig} -> Maybe DynamodbDataSourceConfig
dynamodbConfig) (\s :: CreateDataSource
s@CreateDataSource' {} Maybe DynamodbDataSourceConfig
a -> CreateDataSource
s {$sel:dynamodbConfig:CreateDataSource' :: Maybe DynamodbDataSourceConfig
dynamodbConfig = Maybe DynamodbDataSourceConfig
a} :: CreateDataSource)

-- | Amazon OpenSearch Service settings.
--
-- As of September 2021, Amazon Elasticsearch service is Amazon OpenSearch
-- Service. This configuration is deprecated. For new data sources, use
-- CreateDataSourceRequest$openSearchServiceConfig to create an OpenSearch
-- data source.
createDataSource_elasticsearchConfig :: Lens.Lens' CreateDataSource (Prelude.Maybe ElasticsearchDataSourceConfig)
createDataSource_elasticsearchConfig :: Lens' CreateDataSource (Maybe ElasticsearchDataSourceConfig)
createDataSource_elasticsearchConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSource' {Maybe ElasticsearchDataSourceConfig
elasticsearchConfig :: Maybe ElasticsearchDataSourceConfig
$sel:elasticsearchConfig:CreateDataSource' :: CreateDataSource -> Maybe ElasticsearchDataSourceConfig
elasticsearchConfig} -> Maybe ElasticsearchDataSourceConfig
elasticsearchConfig) (\s :: CreateDataSource
s@CreateDataSource' {} Maybe ElasticsearchDataSourceConfig
a -> CreateDataSource
s {$sel:elasticsearchConfig:CreateDataSource' :: Maybe ElasticsearchDataSourceConfig
elasticsearchConfig = Maybe ElasticsearchDataSourceConfig
a} :: CreateDataSource)

-- | HTTP endpoint settings.
createDataSource_httpConfig :: Lens.Lens' CreateDataSource (Prelude.Maybe HttpDataSourceConfig)
createDataSource_httpConfig :: Lens' CreateDataSource (Maybe HttpDataSourceConfig)
createDataSource_httpConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSource' {Maybe HttpDataSourceConfig
httpConfig :: Maybe HttpDataSourceConfig
$sel:httpConfig:CreateDataSource' :: CreateDataSource -> Maybe HttpDataSourceConfig
httpConfig} -> Maybe HttpDataSourceConfig
httpConfig) (\s :: CreateDataSource
s@CreateDataSource' {} Maybe HttpDataSourceConfig
a -> CreateDataSource
s {$sel:httpConfig:CreateDataSource' :: Maybe HttpDataSourceConfig
httpConfig = Maybe HttpDataSourceConfig
a} :: CreateDataSource)

-- | Lambda settings.
createDataSource_lambdaConfig :: Lens.Lens' CreateDataSource (Prelude.Maybe LambdaDataSourceConfig)
createDataSource_lambdaConfig :: Lens' CreateDataSource (Maybe LambdaDataSourceConfig)
createDataSource_lambdaConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSource' {Maybe LambdaDataSourceConfig
lambdaConfig :: Maybe LambdaDataSourceConfig
$sel:lambdaConfig:CreateDataSource' :: CreateDataSource -> Maybe LambdaDataSourceConfig
lambdaConfig} -> Maybe LambdaDataSourceConfig
lambdaConfig) (\s :: CreateDataSource
s@CreateDataSource' {} Maybe LambdaDataSourceConfig
a -> CreateDataSource
s {$sel:lambdaConfig:CreateDataSource' :: Maybe LambdaDataSourceConfig
lambdaConfig = Maybe LambdaDataSourceConfig
a} :: CreateDataSource)

-- | Amazon OpenSearch Service settings.
createDataSource_openSearchServiceConfig :: Lens.Lens' CreateDataSource (Prelude.Maybe OpenSearchServiceDataSourceConfig)
createDataSource_openSearchServiceConfig :: Lens' CreateDataSource (Maybe OpenSearchServiceDataSourceConfig)
createDataSource_openSearchServiceConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSource' {Maybe OpenSearchServiceDataSourceConfig
openSearchServiceConfig :: Maybe OpenSearchServiceDataSourceConfig
$sel:openSearchServiceConfig:CreateDataSource' :: CreateDataSource -> Maybe OpenSearchServiceDataSourceConfig
openSearchServiceConfig} -> Maybe OpenSearchServiceDataSourceConfig
openSearchServiceConfig) (\s :: CreateDataSource
s@CreateDataSource' {} Maybe OpenSearchServiceDataSourceConfig
a -> CreateDataSource
s {$sel:openSearchServiceConfig:CreateDataSource' :: Maybe OpenSearchServiceDataSourceConfig
openSearchServiceConfig = Maybe OpenSearchServiceDataSourceConfig
a} :: CreateDataSource)

-- | Relational database settings.
createDataSource_relationalDatabaseConfig :: Lens.Lens' CreateDataSource (Prelude.Maybe RelationalDatabaseDataSourceConfig)
createDataSource_relationalDatabaseConfig :: Lens' CreateDataSource (Maybe RelationalDatabaseDataSourceConfig)
createDataSource_relationalDatabaseConfig = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSource' {Maybe RelationalDatabaseDataSourceConfig
relationalDatabaseConfig :: Maybe RelationalDatabaseDataSourceConfig
$sel:relationalDatabaseConfig:CreateDataSource' :: CreateDataSource -> Maybe RelationalDatabaseDataSourceConfig
relationalDatabaseConfig} -> Maybe RelationalDatabaseDataSourceConfig
relationalDatabaseConfig) (\s :: CreateDataSource
s@CreateDataSource' {} Maybe RelationalDatabaseDataSourceConfig
a -> CreateDataSource
s {$sel:relationalDatabaseConfig:CreateDataSource' :: Maybe RelationalDatabaseDataSourceConfig
relationalDatabaseConfig = Maybe RelationalDatabaseDataSourceConfig
a} :: CreateDataSource)

-- | The Identity and Access Management (IAM) service role Amazon Resource
-- Name (ARN) for the data source. The system assumes this role when
-- accessing the data source.
createDataSource_serviceRoleArn :: Lens.Lens' CreateDataSource (Prelude.Maybe Prelude.Text)
createDataSource_serviceRoleArn :: Lens' CreateDataSource (Maybe Text)
createDataSource_serviceRoleArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSource' {Maybe Text
serviceRoleArn :: Maybe Text
$sel:serviceRoleArn:CreateDataSource' :: CreateDataSource -> Maybe Text
serviceRoleArn} -> Maybe Text
serviceRoleArn) (\s :: CreateDataSource
s@CreateDataSource' {} Maybe Text
a -> CreateDataSource
s {$sel:serviceRoleArn:CreateDataSource' :: Maybe Text
serviceRoleArn = Maybe Text
a} :: CreateDataSource)

-- | The API ID for the GraphQL API for the @DataSource@.
createDataSource_apiId :: Lens.Lens' CreateDataSource Prelude.Text
createDataSource_apiId :: Lens' CreateDataSource Text
createDataSource_apiId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSource' {Text
apiId :: Text
$sel:apiId:CreateDataSource' :: CreateDataSource -> Text
apiId} -> Text
apiId) (\s :: CreateDataSource
s@CreateDataSource' {} Text
a -> CreateDataSource
s {$sel:apiId:CreateDataSource' :: Text
apiId = Text
a} :: CreateDataSource)

-- | A user-supplied name for the @DataSource@.
createDataSource_name :: Lens.Lens' CreateDataSource Prelude.Text
createDataSource_name :: Lens' CreateDataSource Text
createDataSource_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSource' {Text
name :: Text
$sel:name:CreateDataSource' :: CreateDataSource -> Text
name} -> Text
name) (\s :: CreateDataSource
s@CreateDataSource' {} Text
a -> CreateDataSource
s {$sel:name:CreateDataSource' :: Text
name = Text
a} :: CreateDataSource)

-- | The type of the @DataSource@.
createDataSource_type :: Lens.Lens' CreateDataSource DataSourceType
createDataSource_type :: Lens' CreateDataSource DataSourceType
createDataSource_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSource' {DataSourceType
type' :: DataSourceType
$sel:type':CreateDataSource' :: CreateDataSource -> DataSourceType
type'} -> DataSourceType
type') (\s :: CreateDataSource
s@CreateDataSource' {} DataSourceType
a -> CreateDataSource
s {$sel:type':CreateDataSource' :: DataSourceType
type' = DataSourceType
a} :: CreateDataSource)

instance Core.AWSRequest CreateDataSource where
  type
    AWSResponse CreateDataSource =
      CreateDataSourceResponse
  request :: (Service -> Service)
-> CreateDataSource -> Request CreateDataSource
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 CreateDataSource
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateDataSource)))
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 DataSource -> Int -> CreateDataSourceResponse
CreateDataSourceResponse'
            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
"dataSource")
            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 CreateDataSource where
  hashWithSalt :: Int -> CreateDataSource -> Int
hashWithSalt Int
_salt CreateDataSource' {Maybe Text
Maybe DynamodbDataSourceConfig
Maybe ElasticsearchDataSourceConfig
Maybe HttpDataSourceConfig
Maybe LambdaDataSourceConfig
Maybe OpenSearchServiceDataSourceConfig
Maybe RelationalDatabaseDataSourceConfig
Text
DataSourceType
type' :: DataSourceType
name :: Text
apiId :: Text
serviceRoleArn :: Maybe Text
relationalDatabaseConfig :: Maybe RelationalDatabaseDataSourceConfig
openSearchServiceConfig :: Maybe OpenSearchServiceDataSourceConfig
lambdaConfig :: Maybe LambdaDataSourceConfig
httpConfig :: Maybe HttpDataSourceConfig
elasticsearchConfig :: Maybe ElasticsearchDataSourceConfig
dynamodbConfig :: Maybe DynamodbDataSourceConfig
description :: Maybe Text
$sel:type':CreateDataSource' :: CreateDataSource -> DataSourceType
$sel:name:CreateDataSource' :: CreateDataSource -> Text
$sel:apiId:CreateDataSource' :: CreateDataSource -> Text
$sel:serviceRoleArn:CreateDataSource' :: CreateDataSource -> Maybe Text
$sel:relationalDatabaseConfig:CreateDataSource' :: CreateDataSource -> Maybe RelationalDatabaseDataSourceConfig
$sel:openSearchServiceConfig:CreateDataSource' :: CreateDataSource -> Maybe OpenSearchServiceDataSourceConfig
$sel:lambdaConfig:CreateDataSource' :: CreateDataSource -> Maybe LambdaDataSourceConfig
$sel:httpConfig:CreateDataSource' :: CreateDataSource -> Maybe HttpDataSourceConfig
$sel:elasticsearchConfig:CreateDataSource' :: CreateDataSource -> Maybe ElasticsearchDataSourceConfig
$sel:dynamodbConfig:CreateDataSource' :: CreateDataSource -> Maybe DynamodbDataSourceConfig
$sel:description:CreateDataSource' :: CreateDataSource -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DynamodbDataSourceConfig
dynamodbConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ElasticsearchDataSourceConfig
elasticsearchConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe HttpDataSourceConfig
httpConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LambdaDataSourceConfig
lambdaConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe OpenSearchServiceDataSourceConfig
openSearchServiceConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RelationalDatabaseDataSourceConfig
relationalDatabaseConfig
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
serviceRoleArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
apiId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` DataSourceType
type'

instance Prelude.NFData CreateDataSource where
  rnf :: CreateDataSource -> ()
rnf CreateDataSource' {Maybe Text
Maybe DynamodbDataSourceConfig
Maybe ElasticsearchDataSourceConfig
Maybe HttpDataSourceConfig
Maybe LambdaDataSourceConfig
Maybe OpenSearchServiceDataSourceConfig
Maybe RelationalDatabaseDataSourceConfig
Text
DataSourceType
type' :: DataSourceType
name :: Text
apiId :: Text
serviceRoleArn :: Maybe Text
relationalDatabaseConfig :: Maybe RelationalDatabaseDataSourceConfig
openSearchServiceConfig :: Maybe OpenSearchServiceDataSourceConfig
lambdaConfig :: Maybe LambdaDataSourceConfig
httpConfig :: Maybe HttpDataSourceConfig
elasticsearchConfig :: Maybe ElasticsearchDataSourceConfig
dynamodbConfig :: Maybe DynamodbDataSourceConfig
description :: Maybe Text
$sel:type':CreateDataSource' :: CreateDataSource -> DataSourceType
$sel:name:CreateDataSource' :: CreateDataSource -> Text
$sel:apiId:CreateDataSource' :: CreateDataSource -> Text
$sel:serviceRoleArn:CreateDataSource' :: CreateDataSource -> Maybe Text
$sel:relationalDatabaseConfig:CreateDataSource' :: CreateDataSource -> Maybe RelationalDatabaseDataSourceConfig
$sel:openSearchServiceConfig:CreateDataSource' :: CreateDataSource -> Maybe OpenSearchServiceDataSourceConfig
$sel:lambdaConfig:CreateDataSource' :: CreateDataSource -> Maybe LambdaDataSourceConfig
$sel:httpConfig:CreateDataSource' :: CreateDataSource -> Maybe HttpDataSourceConfig
$sel:elasticsearchConfig:CreateDataSource' :: CreateDataSource -> Maybe ElasticsearchDataSourceConfig
$sel:dynamodbConfig:CreateDataSource' :: CreateDataSource -> Maybe DynamodbDataSourceConfig
$sel:description:CreateDataSource' :: CreateDataSource -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DynamodbDataSourceConfig
dynamodbConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ElasticsearchDataSourceConfig
elasticsearchConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe HttpDataSourceConfig
httpConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LambdaDataSourceConfig
lambdaConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe OpenSearchServiceDataSourceConfig
openSearchServiceConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RelationalDatabaseDataSourceConfig
relationalDatabaseConfig
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
serviceRoleArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
apiId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DataSourceType
type'

instance Data.ToHeaders CreateDataSource where
  toHeaders :: CreateDataSource -> 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.ToJSON CreateDataSource where
  toJSON :: CreateDataSource -> Value
toJSON CreateDataSource' {Maybe Text
Maybe DynamodbDataSourceConfig
Maybe ElasticsearchDataSourceConfig
Maybe HttpDataSourceConfig
Maybe LambdaDataSourceConfig
Maybe OpenSearchServiceDataSourceConfig
Maybe RelationalDatabaseDataSourceConfig
Text
DataSourceType
type' :: DataSourceType
name :: Text
apiId :: Text
serviceRoleArn :: Maybe Text
relationalDatabaseConfig :: Maybe RelationalDatabaseDataSourceConfig
openSearchServiceConfig :: Maybe OpenSearchServiceDataSourceConfig
lambdaConfig :: Maybe LambdaDataSourceConfig
httpConfig :: Maybe HttpDataSourceConfig
elasticsearchConfig :: Maybe ElasticsearchDataSourceConfig
dynamodbConfig :: Maybe DynamodbDataSourceConfig
description :: Maybe Text
$sel:type':CreateDataSource' :: CreateDataSource -> DataSourceType
$sel:name:CreateDataSource' :: CreateDataSource -> Text
$sel:apiId:CreateDataSource' :: CreateDataSource -> Text
$sel:serviceRoleArn:CreateDataSource' :: CreateDataSource -> Maybe Text
$sel:relationalDatabaseConfig:CreateDataSource' :: CreateDataSource -> Maybe RelationalDatabaseDataSourceConfig
$sel:openSearchServiceConfig:CreateDataSource' :: CreateDataSource -> Maybe OpenSearchServiceDataSourceConfig
$sel:lambdaConfig:CreateDataSource' :: CreateDataSource -> Maybe LambdaDataSourceConfig
$sel:httpConfig:CreateDataSource' :: CreateDataSource -> Maybe HttpDataSourceConfig
$sel:elasticsearchConfig:CreateDataSource' :: CreateDataSource -> Maybe ElasticsearchDataSourceConfig
$sel:dynamodbConfig:CreateDataSource' :: CreateDataSource -> Maybe DynamodbDataSourceConfig
$sel:description:CreateDataSource' :: CreateDataSource -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"description" 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
description,
            (Key
"dynamodbConfig" 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 DynamodbDataSourceConfig
dynamodbConfig,
            (Key
"elasticsearchConfig" 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 ElasticsearchDataSourceConfig
elasticsearchConfig,
            (Key
"httpConfig" 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 HttpDataSourceConfig
httpConfig,
            (Key
"lambdaConfig" 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 LambdaDataSourceConfig
lambdaConfig,
            (Key
"openSearchServiceConfig" 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 OpenSearchServiceDataSourceConfig
openSearchServiceConfig,
            (Key
"relationalDatabaseConfig" 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 RelationalDatabaseDataSourceConfig
relationalDatabaseConfig,
            (Key
"serviceRoleArn" 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
serviceRoleArn,
            forall a. a -> Maybe a
Prelude.Just (Key
"name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
name),
            forall a. a -> Maybe a
Prelude.Just (Key
"type" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= DataSourceType
type')
          ]
      )

instance Data.ToPath CreateDataSource where
  toPath :: CreateDataSource -> ByteString
toPath CreateDataSource' {Maybe Text
Maybe DynamodbDataSourceConfig
Maybe ElasticsearchDataSourceConfig
Maybe HttpDataSourceConfig
Maybe LambdaDataSourceConfig
Maybe OpenSearchServiceDataSourceConfig
Maybe RelationalDatabaseDataSourceConfig
Text
DataSourceType
type' :: DataSourceType
name :: Text
apiId :: Text
serviceRoleArn :: Maybe Text
relationalDatabaseConfig :: Maybe RelationalDatabaseDataSourceConfig
openSearchServiceConfig :: Maybe OpenSearchServiceDataSourceConfig
lambdaConfig :: Maybe LambdaDataSourceConfig
httpConfig :: Maybe HttpDataSourceConfig
elasticsearchConfig :: Maybe ElasticsearchDataSourceConfig
dynamodbConfig :: Maybe DynamodbDataSourceConfig
description :: Maybe Text
$sel:type':CreateDataSource' :: CreateDataSource -> DataSourceType
$sel:name:CreateDataSource' :: CreateDataSource -> Text
$sel:apiId:CreateDataSource' :: CreateDataSource -> Text
$sel:serviceRoleArn:CreateDataSource' :: CreateDataSource -> Maybe Text
$sel:relationalDatabaseConfig:CreateDataSource' :: CreateDataSource -> Maybe RelationalDatabaseDataSourceConfig
$sel:openSearchServiceConfig:CreateDataSource' :: CreateDataSource -> Maybe OpenSearchServiceDataSourceConfig
$sel:lambdaConfig:CreateDataSource' :: CreateDataSource -> Maybe LambdaDataSourceConfig
$sel:httpConfig:CreateDataSource' :: CreateDataSource -> Maybe HttpDataSourceConfig
$sel:elasticsearchConfig:CreateDataSource' :: CreateDataSource -> Maybe ElasticsearchDataSourceConfig
$sel:dynamodbConfig:CreateDataSource' :: CreateDataSource -> Maybe DynamodbDataSourceConfig
$sel:description:CreateDataSource' :: CreateDataSource -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/v1/apis/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
apiId, ByteString
"/datasources"]

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

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

-- |
-- Create a value of 'CreateDataSourceResponse' 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:
--
-- 'dataSource', 'createDataSourceResponse_dataSource' - The @DataSource@ object.
--
-- 'httpStatus', 'createDataSourceResponse_httpStatus' - The response's http status code.
newCreateDataSourceResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateDataSourceResponse
newCreateDataSourceResponse :: Int -> CreateDataSourceResponse
newCreateDataSourceResponse Int
pHttpStatus_ =
  CreateDataSourceResponse'
    { $sel:dataSource:CreateDataSourceResponse' :: Maybe DataSource
dataSource =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateDataSourceResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The @DataSource@ object.
createDataSourceResponse_dataSource :: Lens.Lens' CreateDataSourceResponse (Prelude.Maybe DataSource)
createDataSourceResponse_dataSource :: Lens' CreateDataSourceResponse (Maybe DataSource)
createDataSourceResponse_dataSource = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateDataSourceResponse' {Maybe DataSource
dataSource :: Maybe DataSource
$sel:dataSource:CreateDataSourceResponse' :: CreateDataSourceResponse -> Maybe DataSource
dataSource} -> Maybe DataSource
dataSource) (\s :: CreateDataSourceResponse
s@CreateDataSourceResponse' {} Maybe DataSource
a -> CreateDataSourceResponse
s {$sel:dataSource:CreateDataSourceResponse' :: Maybe DataSource
dataSource = Maybe DataSource
a} :: CreateDataSourceResponse)

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

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