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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisanalyticsv2-application.html

module Stratosphere.Resources.KinesisAnalyticsV2Application where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.KinesisAnalyticsV2ApplicationApplicationConfiguration

-- | Full data type definition for KinesisAnalyticsV2Application. See
-- 'kinesisAnalyticsV2Application' for a more convenient constructor.
data KinesisAnalyticsV2Application =
  KinesisAnalyticsV2Application
  { _kinesisAnalyticsV2ApplicationApplicationConfiguration :: Maybe KinesisAnalyticsV2ApplicationApplicationConfiguration
  , _kinesisAnalyticsV2ApplicationApplicationDescription :: Maybe (Val Text)
  , _kinesisAnalyticsV2ApplicationApplicationName :: Maybe (Val Text)
  , _kinesisAnalyticsV2ApplicationRuntimeEnvironment :: Val Text
  , _kinesisAnalyticsV2ApplicationServiceExecutionRole :: Val Text
  } deriving (Show, Eq)

instance ToResourceProperties KinesisAnalyticsV2Application where
  toResourceProperties KinesisAnalyticsV2Application{..} =
    ResourceProperties
    { resourcePropertiesType = "AWS::KinesisAnalyticsV2::Application"
    , resourcePropertiesProperties =
        hashMapFromList $ catMaybes
        [ fmap (("ApplicationConfiguration",) . toJSON) _kinesisAnalyticsV2ApplicationApplicationConfiguration
        , fmap (("ApplicationDescription",) . toJSON) _kinesisAnalyticsV2ApplicationApplicationDescription
        , fmap (("ApplicationName",) . toJSON) _kinesisAnalyticsV2ApplicationApplicationName
        , (Just . ("RuntimeEnvironment",) . toJSON) _kinesisAnalyticsV2ApplicationRuntimeEnvironment
        , (Just . ("ServiceExecutionRole",) . toJSON) _kinesisAnalyticsV2ApplicationServiceExecutionRole
        ]
    }

-- | Constructor for 'KinesisAnalyticsV2Application' containing required
-- fields as arguments.
kinesisAnalyticsV2Application
  :: Val Text -- ^ 'kavaRuntimeEnvironment'
  -> Val Text -- ^ 'kavaServiceExecutionRole'
  -> KinesisAnalyticsV2Application
kinesisAnalyticsV2Application runtimeEnvironmentarg serviceExecutionRolearg =
  KinesisAnalyticsV2Application
  { _kinesisAnalyticsV2ApplicationApplicationConfiguration = Nothing
  , _kinesisAnalyticsV2ApplicationApplicationDescription = Nothing
  , _kinesisAnalyticsV2ApplicationApplicationName = Nothing
  , _kinesisAnalyticsV2ApplicationRuntimeEnvironment = runtimeEnvironmentarg
  , _kinesisAnalyticsV2ApplicationServiceExecutionRole = serviceExecutionRolearg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisanalyticsv2-application.html#cfn-kinesisanalyticsv2-application-applicationconfiguration
kavaApplicationConfiguration :: Lens' KinesisAnalyticsV2Application (Maybe KinesisAnalyticsV2ApplicationApplicationConfiguration)
kavaApplicationConfiguration = lens _kinesisAnalyticsV2ApplicationApplicationConfiguration (\s a -> s { _kinesisAnalyticsV2ApplicationApplicationConfiguration = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisanalyticsv2-application.html#cfn-kinesisanalyticsv2-application-applicationdescription
kavaApplicationDescription :: Lens' KinesisAnalyticsV2Application (Maybe (Val Text))
kavaApplicationDescription = lens _kinesisAnalyticsV2ApplicationApplicationDescription (\s a -> s { _kinesisAnalyticsV2ApplicationApplicationDescription = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisanalyticsv2-application.html#cfn-kinesisanalyticsv2-application-applicationname
kavaApplicationName :: Lens' KinesisAnalyticsV2Application (Maybe (Val Text))
kavaApplicationName = lens _kinesisAnalyticsV2ApplicationApplicationName (\s a -> s { _kinesisAnalyticsV2ApplicationApplicationName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisanalyticsv2-application.html#cfn-kinesisanalyticsv2-application-runtimeenvironment
kavaRuntimeEnvironment :: Lens' KinesisAnalyticsV2Application (Val Text)
kavaRuntimeEnvironment = lens _kinesisAnalyticsV2ApplicationRuntimeEnvironment (\s a -> s { _kinesisAnalyticsV2ApplicationRuntimeEnvironment = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisanalyticsv2-application.html#cfn-kinesisanalyticsv2-application-serviceexecutionrole
kavaServiceExecutionRole :: Lens' KinesisAnalyticsV2Application (Val Text)
kavaServiceExecutionRole = lens _kinesisAnalyticsV2ApplicationServiceExecutionRole (\s a -> s { _kinesisAnalyticsV2ApplicationServiceExecutionRole = a })