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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisanalyticsv2-application-recordformat.html

module Stratosphere.ResourceProperties.KinesisAnalyticsV2ApplicationRecordFormat where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.KinesisAnalyticsV2ApplicationMappingParameters

-- | Full data type definition for KinesisAnalyticsV2ApplicationRecordFormat.
-- See 'kinesisAnalyticsV2ApplicationRecordFormat' for a more convenient
-- constructor.
data KinesisAnalyticsV2ApplicationRecordFormat =
  KinesisAnalyticsV2ApplicationRecordFormat
  { _kinesisAnalyticsV2ApplicationRecordFormatMappingParameters :: Maybe KinesisAnalyticsV2ApplicationMappingParameters
  , _kinesisAnalyticsV2ApplicationRecordFormatRecordFormatType :: Val Text
  } deriving (Show, Eq)

instance ToJSON KinesisAnalyticsV2ApplicationRecordFormat where
  toJSON KinesisAnalyticsV2ApplicationRecordFormat{..} =
    object $
    catMaybes
    [ fmap (("MappingParameters",) . toJSON) _kinesisAnalyticsV2ApplicationRecordFormatMappingParameters
    , (Just . ("RecordFormatType",) . toJSON) _kinesisAnalyticsV2ApplicationRecordFormatRecordFormatType
    ]

-- | Constructor for 'KinesisAnalyticsV2ApplicationRecordFormat' containing
-- required fields as arguments.
kinesisAnalyticsV2ApplicationRecordFormat
  :: Val Text -- ^ 'kavarfRecordFormatType'
  -> KinesisAnalyticsV2ApplicationRecordFormat
kinesisAnalyticsV2ApplicationRecordFormat recordFormatTypearg =
  KinesisAnalyticsV2ApplicationRecordFormat
  { _kinesisAnalyticsV2ApplicationRecordFormatMappingParameters = Nothing
  , _kinesisAnalyticsV2ApplicationRecordFormatRecordFormatType = recordFormatTypearg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisanalyticsv2-application-recordformat.html#cfn-kinesisanalyticsv2-application-recordformat-mappingparameters
kavarfMappingParameters :: Lens' KinesisAnalyticsV2ApplicationRecordFormat (Maybe KinesisAnalyticsV2ApplicationMappingParameters)
kavarfMappingParameters = lens _kinesisAnalyticsV2ApplicationRecordFormatMappingParameters (\s a -> s { _kinesisAnalyticsV2ApplicationRecordFormatMappingParameters = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-kinesisanalyticsv2-application-recordformat.html#cfn-kinesisanalyticsv2-application-recordformat-recordformattype
kavarfRecordFormatType :: Lens' KinesisAnalyticsV2ApplicationRecordFormat (Val Text)
kavarfRecordFormatType = lens _kinesisAnalyticsV2ApplicationRecordFormatRecordFormatType (\s a -> s { _kinesisAnalyticsV2ApplicationRecordFormatRecordFormatType = a })