packages feed

stratosphere-0.28.0: library-gen/Stratosphere/Resources/AppSyncDataSource.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TupleSections #-}

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html

module Stratosphere.Resources.AppSyncDataSource where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.AppSyncDataSourceDynamoDBConfig
import Stratosphere.ResourceProperties.AppSyncDataSourceElasticsearchConfig
import Stratosphere.ResourceProperties.AppSyncDataSourceHttpConfig
import Stratosphere.ResourceProperties.AppSyncDataSourceLambdaConfig
import Stratosphere.ResourceProperties.AppSyncDataSourceRelationalDatabaseConfig

-- | Full data type definition for AppSyncDataSource. See 'appSyncDataSource'
-- for a more convenient constructor.
data AppSyncDataSource =
  AppSyncDataSource
  { _appSyncDataSourceApiId :: Val Text
  , _appSyncDataSourceDescription :: Maybe (Val Text)
  , _appSyncDataSourceDynamoDBConfig :: Maybe AppSyncDataSourceDynamoDBConfig
  , _appSyncDataSourceElasticsearchConfig :: Maybe AppSyncDataSourceElasticsearchConfig
  , _appSyncDataSourceHttpConfig :: Maybe AppSyncDataSourceHttpConfig
  , _appSyncDataSourceLambdaConfig :: Maybe AppSyncDataSourceLambdaConfig
  , _appSyncDataSourceName :: Val Text
  , _appSyncDataSourceRelationalDatabaseConfig :: Maybe AppSyncDataSourceRelationalDatabaseConfig
  , _appSyncDataSourceServiceRoleArn :: Maybe (Val Text)
  , _appSyncDataSourceType :: Val Text
  } deriving (Show, Eq)

instance ToJSON AppSyncDataSource where
  toJSON AppSyncDataSource{..} =
    object $
    catMaybes
    [ (Just . ("ApiId",) . toJSON) _appSyncDataSourceApiId
    , fmap (("Description",) . toJSON) _appSyncDataSourceDescription
    , fmap (("DynamoDBConfig",) . toJSON) _appSyncDataSourceDynamoDBConfig
    , fmap (("ElasticsearchConfig",) . toJSON) _appSyncDataSourceElasticsearchConfig
    , fmap (("HttpConfig",) . toJSON) _appSyncDataSourceHttpConfig
    , fmap (("LambdaConfig",) . toJSON) _appSyncDataSourceLambdaConfig
    , (Just . ("Name",) . toJSON) _appSyncDataSourceName
    , fmap (("RelationalDatabaseConfig",) . toJSON) _appSyncDataSourceRelationalDatabaseConfig
    , fmap (("ServiceRoleArn",) . toJSON) _appSyncDataSourceServiceRoleArn
    , (Just . ("Type",) . toJSON) _appSyncDataSourceType
    ]

instance FromJSON AppSyncDataSource where
  parseJSON (Object obj) =
    AppSyncDataSource <$>
      (obj .: "ApiId") <*>
      (obj .:? "Description") <*>
      (obj .:? "DynamoDBConfig") <*>
      (obj .:? "ElasticsearchConfig") <*>
      (obj .:? "HttpConfig") <*>
      (obj .:? "LambdaConfig") <*>
      (obj .: "Name") <*>
      (obj .:? "RelationalDatabaseConfig") <*>
      (obj .:? "ServiceRoleArn") <*>
      (obj .: "Type")
  parseJSON _ = mempty

-- | Constructor for 'AppSyncDataSource' containing required fields as
-- arguments.
appSyncDataSource
  :: Val Text -- ^ 'asdsApiId'
  -> Val Text -- ^ 'asdsName'
  -> Val Text -- ^ 'asdsType'
  -> AppSyncDataSource
appSyncDataSource apiIdarg namearg typearg =
  AppSyncDataSource
  { _appSyncDataSourceApiId = apiIdarg
  , _appSyncDataSourceDescription = Nothing
  , _appSyncDataSourceDynamoDBConfig = Nothing
  , _appSyncDataSourceElasticsearchConfig = Nothing
  , _appSyncDataSourceHttpConfig = Nothing
  , _appSyncDataSourceLambdaConfig = Nothing
  , _appSyncDataSourceName = namearg
  , _appSyncDataSourceRelationalDatabaseConfig = Nothing
  , _appSyncDataSourceServiceRoleArn = Nothing
  , _appSyncDataSourceType = typearg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-apiid
asdsApiId :: Lens' AppSyncDataSource (Val Text)
asdsApiId = lens _appSyncDataSourceApiId (\s a -> s { _appSyncDataSourceApiId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-description
asdsDescription :: Lens' AppSyncDataSource (Maybe (Val Text))
asdsDescription = lens _appSyncDataSourceDescription (\s a -> s { _appSyncDataSourceDescription = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-dynamodbconfig
asdsDynamoDBConfig :: Lens' AppSyncDataSource (Maybe AppSyncDataSourceDynamoDBConfig)
asdsDynamoDBConfig = lens _appSyncDataSourceDynamoDBConfig (\s a -> s { _appSyncDataSourceDynamoDBConfig = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-elasticsearchconfig
asdsElasticsearchConfig :: Lens' AppSyncDataSource (Maybe AppSyncDataSourceElasticsearchConfig)
asdsElasticsearchConfig = lens _appSyncDataSourceElasticsearchConfig (\s a -> s { _appSyncDataSourceElasticsearchConfig = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-httpconfig
asdsHttpConfig :: Lens' AppSyncDataSource (Maybe AppSyncDataSourceHttpConfig)
asdsHttpConfig = lens _appSyncDataSourceHttpConfig (\s a -> s { _appSyncDataSourceHttpConfig = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-lambdaconfig
asdsLambdaConfig :: Lens' AppSyncDataSource (Maybe AppSyncDataSourceLambdaConfig)
asdsLambdaConfig = lens _appSyncDataSourceLambdaConfig (\s a -> s { _appSyncDataSourceLambdaConfig = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-name
asdsName :: Lens' AppSyncDataSource (Val Text)
asdsName = lens _appSyncDataSourceName (\s a -> s { _appSyncDataSourceName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-relationaldatabaseconfig
asdsRelationalDatabaseConfig :: Lens' AppSyncDataSource (Maybe AppSyncDataSourceRelationalDatabaseConfig)
asdsRelationalDatabaseConfig = lens _appSyncDataSourceRelationalDatabaseConfig (\s a -> s { _appSyncDataSourceRelationalDatabaseConfig = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-servicerolearn
asdsServiceRoleArn :: Lens' AppSyncDataSource (Maybe (Val Text))
asdsServiceRoleArn = lens _appSyncDataSourceServiceRoleArn (\s a -> s { _appSyncDataSourceServiceRoleArn = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html#cfn-appsync-datasource-type
asdsType :: Lens' AppSyncDataSource (Val Text)
asdsType = lens _appSyncDataSourceType (\s a -> s { _appSyncDataSourceType = a })