packages feed

stratosphere-0.8.0: library-gen/Stratosphere/ResourceProperties/S3BucketRule.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html

module Stratosphere.ResourceProperties.S3BucketRule 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.S3BucketAbortIncompleteMultipartUpload
import Stratosphere.ResourceProperties.S3BucketNoncurrentVersionTransition
import Stratosphere.ResourceProperties.S3BucketTagFilter
import Stratosphere.ResourceProperties.S3BucketTransition

-- | Full data type definition for S3BucketRule. See 's3BucketRule' for a more
-- convenient constructor.
data S3BucketRule =
  S3BucketRule
  { _s3BucketRuleAbortIncompleteMultipartUpload :: Maybe S3BucketAbortIncompleteMultipartUpload
  , _s3BucketRuleExpirationDate :: Maybe (Val Text)
  , _s3BucketRuleExpirationInDays :: Maybe (Val Integer)
  , _s3BucketRuleId :: Maybe (Val Text)
  , _s3BucketRuleNoncurrentVersionExpirationInDays :: Maybe (Val Integer)
  , _s3BucketRuleNoncurrentVersionTransition :: Maybe S3BucketNoncurrentVersionTransition
  , _s3BucketRuleNoncurrentVersionTransitions :: Maybe [S3BucketNoncurrentVersionTransition]
  , _s3BucketRulePrefix :: Maybe (Val Text)
  , _s3BucketRuleStatus :: Val Text
  , _s3BucketRuleTagFilters :: Maybe [S3BucketTagFilter]
  , _s3BucketRuleTransition :: Maybe S3BucketTransition
  , _s3BucketRuleTransitions :: Maybe [S3BucketTransition]
  } deriving (Show, Eq)

instance ToJSON S3BucketRule where
  toJSON S3BucketRule{..} =
    object $
    catMaybes
    [ fmap (("AbortIncompleteMultipartUpload",) . toJSON) _s3BucketRuleAbortIncompleteMultipartUpload
    , fmap (("ExpirationDate",) . toJSON) _s3BucketRuleExpirationDate
    , fmap (("ExpirationInDays",) . toJSON . fmap Integer') _s3BucketRuleExpirationInDays
    , fmap (("Id",) . toJSON) _s3BucketRuleId
    , fmap (("NoncurrentVersionExpirationInDays",) . toJSON . fmap Integer') _s3BucketRuleNoncurrentVersionExpirationInDays
    , fmap (("NoncurrentVersionTransition",) . toJSON) _s3BucketRuleNoncurrentVersionTransition
    , fmap (("NoncurrentVersionTransitions",) . toJSON) _s3BucketRuleNoncurrentVersionTransitions
    , fmap (("Prefix",) . toJSON) _s3BucketRulePrefix
    , (Just . ("Status",) . toJSON) _s3BucketRuleStatus
    , fmap (("TagFilters",) . toJSON) _s3BucketRuleTagFilters
    , fmap (("Transition",) . toJSON) _s3BucketRuleTransition
    , fmap (("Transitions",) . toJSON) _s3BucketRuleTransitions
    ]

instance FromJSON S3BucketRule where
  parseJSON (Object obj) =
    S3BucketRule <$>
      (obj .:? "AbortIncompleteMultipartUpload") <*>
      (obj .:? "ExpirationDate") <*>
      fmap (fmap (fmap unInteger')) (obj .:? "ExpirationInDays") <*>
      (obj .:? "Id") <*>
      fmap (fmap (fmap unInteger')) (obj .:? "NoncurrentVersionExpirationInDays") <*>
      (obj .:? "NoncurrentVersionTransition") <*>
      (obj .:? "NoncurrentVersionTransitions") <*>
      (obj .:? "Prefix") <*>
      (obj .: "Status") <*>
      (obj .:? "TagFilters") <*>
      (obj .:? "Transition") <*>
      (obj .:? "Transitions")
  parseJSON _ = mempty

-- | Constructor for 'S3BucketRule' containing required fields as arguments.
s3BucketRule
  :: Val Text -- ^ 'sbrStatus'
  -> S3BucketRule
s3BucketRule statusarg =
  S3BucketRule
  { _s3BucketRuleAbortIncompleteMultipartUpload = Nothing
  , _s3BucketRuleExpirationDate = Nothing
  , _s3BucketRuleExpirationInDays = Nothing
  , _s3BucketRuleId = Nothing
  , _s3BucketRuleNoncurrentVersionExpirationInDays = Nothing
  , _s3BucketRuleNoncurrentVersionTransition = Nothing
  , _s3BucketRuleNoncurrentVersionTransitions = Nothing
  , _s3BucketRulePrefix = Nothing
  , _s3BucketRuleStatus = statusarg
  , _s3BucketRuleTagFilters = Nothing
  , _s3BucketRuleTransition = Nothing
  , _s3BucketRuleTransitions = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-rule-abortincompletemultipartupload
sbrAbortIncompleteMultipartUpload :: Lens' S3BucketRule (Maybe S3BucketAbortIncompleteMultipartUpload)
sbrAbortIncompleteMultipartUpload = lens _s3BucketRuleAbortIncompleteMultipartUpload (\s a -> s { _s3BucketRuleAbortIncompleteMultipartUpload = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-expirationdate
sbrExpirationDate :: Lens' S3BucketRule (Maybe (Val Text))
sbrExpirationDate = lens _s3BucketRuleExpirationDate (\s a -> s { _s3BucketRuleExpirationDate = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-expirationindays
sbrExpirationInDays :: Lens' S3BucketRule (Maybe (Val Integer))
sbrExpirationInDays = lens _s3BucketRuleExpirationInDays (\s a -> s { _s3BucketRuleExpirationInDays = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-id
sbrId :: Lens' S3BucketRule (Maybe (Val Text))
sbrId = lens _s3BucketRuleId (\s a -> s { _s3BucketRuleId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversionexpirationindays
sbrNoncurrentVersionExpirationInDays :: Lens' S3BucketRule (Maybe (Val Integer))
sbrNoncurrentVersionExpirationInDays = lens _s3BucketRuleNoncurrentVersionExpirationInDays (\s a -> s { _s3BucketRuleNoncurrentVersionExpirationInDays = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition
sbrNoncurrentVersionTransition :: Lens' S3BucketRule (Maybe S3BucketNoncurrentVersionTransition)
sbrNoncurrentVersionTransition = lens _s3BucketRuleNoncurrentVersionTransition (\s a -> s { _s3BucketRuleNoncurrentVersionTransition = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-noncurrentversiontransitions
sbrNoncurrentVersionTransitions :: Lens' S3BucketRule (Maybe [S3BucketNoncurrentVersionTransition])
sbrNoncurrentVersionTransitions = lens _s3BucketRuleNoncurrentVersionTransitions (\s a -> s { _s3BucketRuleNoncurrentVersionTransitions = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-prefix
sbrPrefix :: Lens' S3BucketRule (Maybe (Val Text))
sbrPrefix = lens _s3BucketRulePrefix (\s a -> s { _s3BucketRulePrefix = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-status
sbrStatus :: Lens' S3BucketRule (Val Text)
sbrStatus = lens _s3BucketRuleStatus (\s a -> s { _s3BucketRuleStatus = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-rule-tagfilters
sbrTagFilters :: Lens' S3BucketRule (Maybe [S3BucketTagFilter])
sbrTagFilters = lens _s3BucketRuleTagFilters (\s a -> s { _s3BucketRuleTagFilters = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-transition
sbrTransition :: Lens' S3BucketRule (Maybe S3BucketTransition)
sbrTransition = lens _s3BucketRuleTransition (\s a -> s { _s3BucketRuleTransition = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html#cfn-s3-bucket-lifecycleconfig-rule-transitions
sbrTransitions :: Lens' S3BucketRule (Maybe [S3BucketTransition])
sbrTransitions = lens _s3BucketRuleTransitions (\s a -> s { _s3BucketRuleTransitions = a })