packages feed

stratosphere-0.6.0: library-gen/Stratosphere/Resources/AutoScalingScalingPolicy.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html

module Stratosphere.Resources.AutoScalingScalingPolicy 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.AutoScalingScalingPolicyStepAdjustment

-- | Full data type definition for AutoScalingScalingPolicy. See
-- 'autoScalingScalingPolicy' for a more convenient constructor.
data AutoScalingScalingPolicy =
  AutoScalingScalingPolicy
  { _autoScalingScalingPolicyAdjustmentType :: Val Text
  , _autoScalingScalingPolicyAutoScalingGroupName :: Val Text
  , _autoScalingScalingPolicyCooldown :: Maybe (Val Text)
  , _autoScalingScalingPolicyEstimatedInstanceWarmup :: Maybe (Val Integer)
  , _autoScalingScalingPolicyMetricAggregationType :: Maybe (Val Text)
  , _autoScalingScalingPolicyMinAdjustmentMagnitude :: Maybe (Val Integer)
  , _autoScalingScalingPolicyPolicyType :: Maybe (Val Text)
  , _autoScalingScalingPolicyScalingAdjustment :: Maybe (Val Integer)
  , _autoScalingScalingPolicyStepAdjustments :: Maybe [AutoScalingScalingPolicyStepAdjustment]
  } deriving (Show, Eq)

instance ToJSON AutoScalingScalingPolicy where
  toJSON AutoScalingScalingPolicy{..} =
    object $
    catMaybes
    [ (Just . ("AdjustmentType",) . toJSON) _autoScalingScalingPolicyAdjustmentType
    , (Just . ("AutoScalingGroupName",) . toJSON) _autoScalingScalingPolicyAutoScalingGroupName
    , fmap (("Cooldown",) . toJSON) _autoScalingScalingPolicyCooldown
    , fmap (("EstimatedInstanceWarmup",) . toJSON . fmap Integer') _autoScalingScalingPolicyEstimatedInstanceWarmup
    , fmap (("MetricAggregationType",) . toJSON) _autoScalingScalingPolicyMetricAggregationType
    , fmap (("MinAdjustmentMagnitude",) . toJSON . fmap Integer') _autoScalingScalingPolicyMinAdjustmentMagnitude
    , fmap (("PolicyType",) . toJSON) _autoScalingScalingPolicyPolicyType
    , fmap (("ScalingAdjustment",) . toJSON . fmap Integer') _autoScalingScalingPolicyScalingAdjustment
    , fmap (("StepAdjustments",) . toJSON) _autoScalingScalingPolicyStepAdjustments
    ]

instance FromJSON AutoScalingScalingPolicy where
  parseJSON (Object obj) =
    AutoScalingScalingPolicy <$>
      (obj .: "AdjustmentType") <*>
      (obj .: "AutoScalingGroupName") <*>
      (obj .:? "Cooldown") <*>
      fmap (fmap (fmap unInteger')) (obj .:? "EstimatedInstanceWarmup") <*>
      (obj .:? "MetricAggregationType") <*>
      fmap (fmap (fmap unInteger')) (obj .:? "MinAdjustmentMagnitude") <*>
      (obj .:? "PolicyType") <*>
      fmap (fmap (fmap unInteger')) (obj .:? "ScalingAdjustment") <*>
      (obj .:? "StepAdjustments")
  parseJSON _ = mempty

-- | Constructor for 'AutoScalingScalingPolicy' containing required fields as
-- arguments.
autoScalingScalingPolicy
  :: Val Text -- ^ 'asspAdjustmentType'
  -> Val Text -- ^ 'asspAutoScalingGroupName'
  -> AutoScalingScalingPolicy
autoScalingScalingPolicy adjustmentTypearg autoScalingGroupNamearg =
  AutoScalingScalingPolicy
  { _autoScalingScalingPolicyAdjustmentType = adjustmentTypearg
  , _autoScalingScalingPolicyAutoScalingGroupName = autoScalingGroupNamearg
  , _autoScalingScalingPolicyCooldown = Nothing
  , _autoScalingScalingPolicyEstimatedInstanceWarmup = Nothing
  , _autoScalingScalingPolicyMetricAggregationType = Nothing
  , _autoScalingScalingPolicyMinAdjustmentMagnitude = Nothing
  , _autoScalingScalingPolicyPolicyType = Nothing
  , _autoScalingScalingPolicyScalingAdjustment = Nothing
  , _autoScalingScalingPolicyStepAdjustments = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-adjustmenttype
asspAdjustmentType :: Lens' AutoScalingScalingPolicy (Val Text)
asspAdjustmentType = lens _autoScalingScalingPolicyAdjustmentType (\s a -> s { _autoScalingScalingPolicyAdjustmentType = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-autoscalinggroupname
asspAutoScalingGroupName :: Lens' AutoScalingScalingPolicy (Val Text)
asspAutoScalingGroupName = lens _autoScalingScalingPolicyAutoScalingGroupName (\s a -> s { _autoScalingScalingPolicyAutoScalingGroupName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-cooldown
asspCooldown :: Lens' AutoScalingScalingPolicy (Maybe (Val Text))
asspCooldown = lens _autoScalingScalingPolicyCooldown (\s a -> s { _autoScalingScalingPolicyCooldown = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-estimatedinstancewarmup
asspEstimatedInstanceWarmup :: Lens' AutoScalingScalingPolicy (Maybe (Val Integer))
asspEstimatedInstanceWarmup = lens _autoScalingScalingPolicyEstimatedInstanceWarmup (\s a -> s { _autoScalingScalingPolicyEstimatedInstanceWarmup = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-metricaggregationtype
asspMetricAggregationType :: Lens' AutoScalingScalingPolicy (Maybe (Val Text))
asspMetricAggregationType = lens _autoScalingScalingPolicyMetricAggregationType (\s a -> s { _autoScalingScalingPolicyMetricAggregationType = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-minadjustmentmagnitude
asspMinAdjustmentMagnitude :: Lens' AutoScalingScalingPolicy (Maybe (Val Integer))
asspMinAdjustmentMagnitude = lens _autoScalingScalingPolicyMinAdjustmentMagnitude (\s a -> s { _autoScalingScalingPolicyMinAdjustmentMagnitude = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-policytype
asspPolicyType :: Lens' AutoScalingScalingPolicy (Maybe (Val Text))
asspPolicyType = lens _autoScalingScalingPolicyPolicyType (\s a -> s { _autoScalingScalingPolicyPolicyType = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-scalingadjustment
asspScalingAdjustment :: Lens' AutoScalingScalingPolicy (Maybe (Val Integer))
asspScalingAdjustment = lens _autoScalingScalingPolicyScalingAdjustment (\s a -> s { _autoScalingScalingPolicyScalingAdjustment = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-policy.html#cfn-as-scalingpolicy-stepadjustments
asspStepAdjustments :: Lens' AutoScalingScalingPolicy (Maybe [AutoScalingScalingPolicyStepAdjustment])
asspStepAdjustments = lens _autoScalingScalingPolicyStepAdjustments (\s a -> s { _autoScalingScalingPolicyStepAdjustments = a })