packages feed

stratosphere-0.4.1: library-gen/Stratosphere/Resources/ElasticBeanstalkConfigurationTemplate.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html

module Stratosphere.Resources.ElasticBeanstalkConfigurationTemplate where

import Control.Lens hiding ((.=))
import Data.Aeson
import Data.Maybe (catMaybes)
import Data.Monoid (mempty)
import Data.Text

import Stratosphere.Values
import Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting
import Stratosphere.ResourceProperties.ElasticBeanstalkConfigurationTemplateSourceConfiguration

-- | Full data type definition for ElasticBeanstalkConfigurationTemplate. See
-- | 'elasticBeanstalkConfigurationTemplate' for a more convenient
-- | constructor.
data ElasticBeanstalkConfigurationTemplate =
  ElasticBeanstalkConfigurationTemplate
  { _elasticBeanstalkConfigurationTemplateApplicationName :: Val Text
  , _elasticBeanstalkConfigurationTemplateDescription :: Maybe (Val Text)
  , _elasticBeanstalkConfigurationTemplateEnvironmentId :: Maybe (Val Text)
  , _elasticBeanstalkConfigurationTemplateOptionSettings :: Maybe [ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting]
  , _elasticBeanstalkConfigurationTemplateSolutionStackName :: Maybe (Val Text)
  , _elasticBeanstalkConfigurationTemplateSourceConfiguration :: Maybe ElasticBeanstalkConfigurationTemplateSourceConfiguration
  } deriving (Show, Eq)

instance ToJSON ElasticBeanstalkConfigurationTemplate where
  toJSON ElasticBeanstalkConfigurationTemplate{..} =
    object $
    catMaybes
    [ Just ("ApplicationName" .= _elasticBeanstalkConfigurationTemplateApplicationName)
    , ("Description" .=) <$> _elasticBeanstalkConfigurationTemplateDescription
    , ("EnvironmentId" .=) <$> _elasticBeanstalkConfigurationTemplateEnvironmentId
    , ("OptionSettings" .=) <$> _elasticBeanstalkConfigurationTemplateOptionSettings
    , ("SolutionStackName" .=) <$> _elasticBeanstalkConfigurationTemplateSolutionStackName
    , ("SourceConfiguration" .=) <$> _elasticBeanstalkConfigurationTemplateSourceConfiguration
    ]

instance FromJSON ElasticBeanstalkConfigurationTemplate where
  parseJSON (Object obj) =
    ElasticBeanstalkConfigurationTemplate <$>
      obj .: "ApplicationName" <*>
      obj .:? "Description" <*>
      obj .:? "EnvironmentId" <*>
      obj .:? "OptionSettings" <*>
      obj .:? "SolutionStackName" <*>
      obj .:? "SourceConfiguration"
  parseJSON _ = mempty

-- | Constructor for 'ElasticBeanstalkConfigurationTemplate' containing
-- | required fields as arguments.
elasticBeanstalkConfigurationTemplate
  :: Val Text -- ^ 'ebctApplicationName'
  -> ElasticBeanstalkConfigurationTemplate
elasticBeanstalkConfigurationTemplate applicationNamearg =
  ElasticBeanstalkConfigurationTemplate
  { _elasticBeanstalkConfigurationTemplateApplicationName = applicationNamearg
  , _elasticBeanstalkConfigurationTemplateDescription = Nothing
  , _elasticBeanstalkConfigurationTemplateEnvironmentId = Nothing
  , _elasticBeanstalkConfigurationTemplateOptionSettings = Nothing
  , _elasticBeanstalkConfigurationTemplateSolutionStackName = Nothing
  , _elasticBeanstalkConfigurationTemplateSourceConfiguration = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-applicationname
ebctApplicationName :: Lens' ElasticBeanstalkConfigurationTemplate (Val Text)
ebctApplicationName = lens _elasticBeanstalkConfigurationTemplateApplicationName (\s a -> s { _elasticBeanstalkConfigurationTemplateApplicationName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-description
ebctDescription :: Lens' ElasticBeanstalkConfigurationTemplate (Maybe (Val Text))
ebctDescription = lens _elasticBeanstalkConfigurationTemplateDescription (\s a -> s { _elasticBeanstalkConfigurationTemplateDescription = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-environmentid
ebctEnvironmentId :: Lens' ElasticBeanstalkConfigurationTemplate (Maybe (Val Text))
ebctEnvironmentId = lens _elasticBeanstalkConfigurationTemplateEnvironmentId (\s a -> s { _elasticBeanstalkConfigurationTemplateEnvironmentId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-optionsettings
ebctOptionSettings :: Lens' ElasticBeanstalkConfigurationTemplate (Maybe [ElasticBeanstalkConfigurationTemplateConfigurationOptionSetting])
ebctOptionSettings = lens _elasticBeanstalkConfigurationTemplateOptionSettings (\s a -> s { _elasticBeanstalkConfigurationTemplateOptionSettings = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-solutionstackname
ebctSolutionStackName :: Lens' ElasticBeanstalkConfigurationTemplate (Maybe (Val Text))
ebctSolutionStackName = lens _elasticBeanstalkConfigurationTemplateSolutionStackName (\s a -> s { _elasticBeanstalkConfigurationTemplateSolutionStackName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-beanstalk-configurationtemplate.html#cfn-elasticbeanstalk-configurationtemplate-sourceconfiguration
ebctSourceConfiguration :: Lens' ElasticBeanstalkConfigurationTemplate (Maybe ElasticBeanstalkConfigurationTemplateSourceConfiguration)
ebctSourceConfiguration = lens _elasticBeanstalkConfigurationTemplateSourceConfiguration (\s a -> s { _elasticBeanstalkConfigurationTemplateSourceConfiguration = a })