packages feed

stratosphere-0.4.1: library-gen/Stratosphere/ResourceProperties/DynamoDBTableLocalSecondaryIndex.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-lsi.html

module Stratosphere.ResourceProperties.DynamoDBTableLocalSecondaryIndex 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.DynamoDBTableKeySchema
import Stratosphere.ResourceProperties.DynamoDBTableProjection

-- | Full data type definition for DynamoDBTableLocalSecondaryIndex. See
-- | 'dynamoDBTableLocalSecondaryIndex' for a more convenient constructor.
data DynamoDBTableLocalSecondaryIndex =
  DynamoDBTableLocalSecondaryIndex
  { _dynamoDBTableLocalSecondaryIndexIndexName :: Val Text
  , _dynamoDBTableLocalSecondaryIndexKeySchema :: [DynamoDBTableKeySchema]
  , _dynamoDBTableLocalSecondaryIndexProjection :: DynamoDBTableProjection
  } deriving (Show, Eq)

instance ToJSON DynamoDBTableLocalSecondaryIndex where
  toJSON DynamoDBTableLocalSecondaryIndex{..} =
    object $
    catMaybes
    [ Just ("IndexName" .= _dynamoDBTableLocalSecondaryIndexIndexName)
    , Just ("KeySchema" .= _dynamoDBTableLocalSecondaryIndexKeySchema)
    , Just ("Projection" .= _dynamoDBTableLocalSecondaryIndexProjection)
    ]

instance FromJSON DynamoDBTableLocalSecondaryIndex where
  parseJSON (Object obj) =
    DynamoDBTableLocalSecondaryIndex <$>
      obj .: "IndexName" <*>
      obj .: "KeySchema" <*>
      obj .: "Projection"
  parseJSON _ = mempty

-- | Constructor for 'DynamoDBTableLocalSecondaryIndex' containing required
-- | fields as arguments.
dynamoDBTableLocalSecondaryIndex
  :: Val Text -- ^ 'ddbtlsiIndexName'
  -> [DynamoDBTableKeySchema] -- ^ 'ddbtlsiKeySchema'
  -> DynamoDBTableProjection -- ^ 'ddbtlsiProjection'
  -> DynamoDBTableLocalSecondaryIndex
dynamoDBTableLocalSecondaryIndex indexNamearg keySchemaarg projectionarg =
  DynamoDBTableLocalSecondaryIndex
  { _dynamoDBTableLocalSecondaryIndexIndexName = indexNamearg
  , _dynamoDBTableLocalSecondaryIndexKeySchema = keySchemaarg
  , _dynamoDBTableLocalSecondaryIndexProjection = projectionarg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-lsi.html#cfn-dynamodb-lsi-indexname
ddbtlsiIndexName :: Lens' DynamoDBTableLocalSecondaryIndex (Val Text)
ddbtlsiIndexName = lens _dynamoDBTableLocalSecondaryIndexIndexName (\s a -> s { _dynamoDBTableLocalSecondaryIndexIndexName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-lsi.html#cfn-dynamodb-lsi-keyschema
ddbtlsiKeySchema :: Lens' DynamoDBTableLocalSecondaryIndex [DynamoDBTableKeySchema]
ddbtlsiKeySchema = lens _dynamoDBTableLocalSecondaryIndexKeySchema (\s a -> s { _dynamoDBTableLocalSecondaryIndexKeySchema = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-lsi.html#cfn-dynamodb-lsi-projection
ddbtlsiProjection :: Lens' DynamoDBTableLocalSecondaryIndex DynamoDBTableProjection
ddbtlsiProjection = lens _dynamoDBTableLocalSecondaryIndexProjection (\s a -> s { _dynamoDBTableLocalSecondaryIndexProjection = a })