packages feed

stratosphere-0.4.4: library-gen/Stratosphere/ResourceProperties/ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html

module Stratosphere.ResourceProperties.ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification 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.ApplicationAutoScalingScalingPolicyMetricDimension

-- | Full data type definition for
-- ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification. See
-- 'applicationAutoScalingScalingPolicyCustomizedMetricSpecification' for a
-- more convenient constructor.
data ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification =
  ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification
  { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationDimensions :: Maybe [ApplicationAutoScalingScalingPolicyMetricDimension]
  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationMetricName :: Val Text
  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationNamespace :: Val Text
  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationStatistic :: Val Text
  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationUnit :: Maybe (Val Text)
  } deriving (Show, Eq)

instance ToJSON ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification where
  toJSON ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification{..} =
    object $
    catMaybes
    [ ("Dimensions" .=) <$> _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationDimensions
    , Just ("MetricName" .= _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationMetricName)
    , Just ("Namespace" .= _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationNamespace)
    , Just ("Statistic" .= _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationStatistic)
    , ("Unit" .=) <$> _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationUnit
    ]

instance FromJSON ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification where
  parseJSON (Object obj) =
    ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification <$>
      obj .:? "Dimensions" <*>
      obj .: "MetricName" <*>
      obj .: "Namespace" <*>
      obj .: "Statistic" <*>
      obj .:? "Unit"
  parseJSON _ = mempty

-- | Constructor for
-- 'ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification'
-- containing required fields as arguments.
applicationAutoScalingScalingPolicyCustomizedMetricSpecification
  :: Val Text -- ^ 'aasspcmsMetricName'
  -> Val Text -- ^ 'aasspcmsNamespace'
  -> Val Text -- ^ 'aasspcmsStatistic'
  -> ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification
applicationAutoScalingScalingPolicyCustomizedMetricSpecification metricNamearg namespacearg statisticarg =
  ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification
  { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationDimensions = Nothing
  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationMetricName = metricNamearg
  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationNamespace = namespacearg
  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationStatistic = statisticarg
  , _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationUnit = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-customizedmetricspecification-dimensions
aasspcmsDimensions :: Lens' ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification (Maybe [ApplicationAutoScalingScalingPolicyMetricDimension])
aasspcmsDimensions = lens _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationDimensions (\s a -> s { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationDimensions = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-customizedmetricspecification-metricname
aasspcmsMetricName :: Lens' ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification (Val Text)
aasspcmsMetricName = lens _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationMetricName (\s a -> s { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationMetricName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-customizedmetricspecification-namespace
aasspcmsNamespace :: Lens' ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification (Val Text)
aasspcmsNamespace = lens _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationNamespace (\s a -> s { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationNamespace = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-customizedmetricspecification-statistic
aasspcmsStatistic :: Lens' ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification (Val Text)
aasspcmsStatistic = lens _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationStatistic (\s a -> s { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationStatistic = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-applicationautoscaling-scalingpolicy-customizedmetricspecification.html#cfn-applicationautoscaling-scalingpolicy-customizedmetricspecification-unit
aasspcmsUnit :: Lens' ApplicationAutoScalingScalingPolicyCustomizedMetricSpecification (Maybe (Val Text))
aasspcmsUnit = lens _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationUnit (\s a -> s { _applicationAutoScalingScalingPolicyCustomizedMetricSpecificationUnit = a })