packages feed

stratosphere-0.4.2: library-gen/Stratosphere/Resources/ConfigConfigRule.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html

module Stratosphere.Resources.ConfigConfigRule 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.ConfigConfigRuleScope
import Stratosphere.ResourceProperties.ConfigConfigRuleSource

-- | Full data type definition for ConfigConfigRule. See 'configConfigRule'
-- for a more convenient constructor.
data ConfigConfigRule =
  ConfigConfigRule
  { _configConfigRuleConfigRuleName :: Maybe (Val Text)
  , _configConfigRuleDescription :: Maybe (Val Text)
  , _configConfigRuleInputParameters :: Maybe Object
  , _configConfigRuleMaximumExecutionFrequency :: Maybe (Val Text)
  , _configConfigRuleScope :: Maybe ConfigConfigRuleScope
  , _configConfigRuleSource :: ConfigConfigRuleSource
  } deriving (Show, Eq)

instance ToJSON ConfigConfigRule where
  toJSON ConfigConfigRule{..} =
    object $
    catMaybes
    [ ("ConfigRuleName" .=) <$> _configConfigRuleConfigRuleName
    , ("Description" .=) <$> _configConfigRuleDescription
    , ("InputParameters" .=) <$> _configConfigRuleInputParameters
    , ("MaximumExecutionFrequency" .=) <$> _configConfigRuleMaximumExecutionFrequency
    , ("Scope" .=) <$> _configConfigRuleScope
    , Just ("Source" .= _configConfigRuleSource)
    ]

instance FromJSON ConfigConfigRule where
  parseJSON (Object obj) =
    ConfigConfigRule <$>
      obj .:? "ConfigRuleName" <*>
      obj .:? "Description" <*>
      obj .:? "InputParameters" <*>
      obj .:? "MaximumExecutionFrequency" <*>
      obj .:? "Scope" <*>
      obj .: "Source"
  parseJSON _ = mempty

-- | Constructor for 'ConfigConfigRule' containing required fields as
-- arguments.
configConfigRule
  :: ConfigConfigRuleSource -- ^ 'ccrSource'
  -> ConfigConfigRule
configConfigRule sourcearg =
  ConfigConfigRule
  { _configConfigRuleConfigRuleName = Nothing
  , _configConfigRuleDescription = Nothing
  , _configConfigRuleInputParameters = Nothing
  , _configConfigRuleMaximumExecutionFrequency = Nothing
  , _configConfigRuleScope = Nothing
  , _configConfigRuleSource = sourcearg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-configrulename
ccrConfigRuleName :: Lens' ConfigConfigRule (Maybe (Val Text))
ccrConfigRuleName = lens _configConfigRuleConfigRuleName (\s a -> s { _configConfigRuleConfigRuleName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-description
ccrDescription :: Lens' ConfigConfigRule (Maybe (Val Text))
ccrDescription = lens _configConfigRuleDescription (\s a -> s { _configConfigRuleDescription = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-inputparameters
ccrInputParameters :: Lens' ConfigConfigRule (Maybe Object)
ccrInputParameters = lens _configConfigRuleInputParameters (\s a -> s { _configConfigRuleInputParameters = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-maximumexecutionfrequency
ccrMaximumExecutionFrequency :: Lens' ConfigConfigRule (Maybe (Val Text))
ccrMaximumExecutionFrequency = lens _configConfigRuleMaximumExecutionFrequency (\s a -> s { _configConfigRuleMaximumExecutionFrequency = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-scope
ccrScope :: Lens' ConfigConfigRule (Maybe ConfigConfigRuleScope)
ccrScope = lens _configConfigRuleScope (\s a -> s { _configConfigRuleScope = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-config-configrule.html#cfn-config-configrule-source
ccrSource :: Lens' ConfigConfigRule ConfigConfigRuleSource
ccrSource = lens _configConfigRuleSource (\s a -> s { _configConfigRuleSource = a })