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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-dataset-variable.html

module Stratosphere.ResourceProperties.IoTAnalyticsDatasetVariable where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.IoTAnalyticsDatasetDatasetContentVersionValue
import Stratosphere.ResourceProperties.IoTAnalyticsDatasetOutputFileUriValue

-- | Full data type definition for IoTAnalyticsDatasetVariable. See
-- 'ioTAnalyticsDatasetVariable' for a more convenient constructor.
data IoTAnalyticsDatasetVariable =
  IoTAnalyticsDatasetVariable
  { _ioTAnalyticsDatasetVariableDatasetContentVersionValue :: Maybe IoTAnalyticsDatasetDatasetContentVersionValue
  , _ioTAnalyticsDatasetVariableDoubleValue :: Maybe (Val Double)
  , _ioTAnalyticsDatasetVariableOutputFileUriValue :: Maybe IoTAnalyticsDatasetOutputFileUriValue
  , _ioTAnalyticsDatasetVariableStringValue :: Maybe (Val Text)
  , _ioTAnalyticsDatasetVariableVariableName :: Val Text
  } deriving (Show, Eq)

instance ToJSON IoTAnalyticsDatasetVariable where
  toJSON IoTAnalyticsDatasetVariable{..} =
    object $
    catMaybes
    [ fmap (("DatasetContentVersionValue",) . toJSON) _ioTAnalyticsDatasetVariableDatasetContentVersionValue
    , fmap (("DoubleValue",) . toJSON) _ioTAnalyticsDatasetVariableDoubleValue
    , fmap (("OutputFileUriValue",) . toJSON) _ioTAnalyticsDatasetVariableOutputFileUriValue
    , fmap (("StringValue",) . toJSON) _ioTAnalyticsDatasetVariableStringValue
    , (Just . ("VariableName",) . toJSON) _ioTAnalyticsDatasetVariableVariableName
    ]

-- | Constructor for 'IoTAnalyticsDatasetVariable' containing required fields
-- as arguments.
ioTAnalyticsDatasetVariable
  :: Val Text -- ^ 'itadvVariableName'
  -> IoTAnalyticsDatasetVariable
ioTAnalyticsDatasetVariable variableNamearg =
  IoTAnalyticsDatasetVariable
  { _ioTAnalyticsDatasetVariableDatasetContentVersionValue = Nothing
  , _ioTAnalyticsDatasetVariableDoubleValue = Nothing
  , _ioTAnalyticsDatasetVariableOutputFileUriValue = Nothing
  , _ioTAnalyticsDatasetVariableStringValue = Nothing
  , _ioTAnalyticsDatasetVariableVariableName = variableNamearg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-dataset-variable.html#cfn-iotanalytics-dataset-variable-datasetcontentversionvalue
itadvDatasetContentVersionValue :: Lens' IoTAnalyticsDatasetVariable (Maybe IoTAnalyticsDatasetDatasetContentVersionValue)
itadvDatasetContentVersionValue = lens _ioTAnalyticsDatasetVariableDatasetContentVersionValue (\s a -> s { _ioTAnalyticsDatasetVariableDatasetContentVersionValue = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-dataset-variable.html#cfn-iotanalytics-dataset-variable-doublevalue
itadvDoubleValue :: Lens' IoTAnalyticsDatasetVariable (Maybe (Val Double))
itadvDoubleValue = lens _ioTAnalyticsDatasetVariableDoubleValue (\s a -> s { _ioTAnalyticsDatasetVariableDoubleValue = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-dataset-variable.html#cfn-iotanalytics-dataset-variable-outputfileurivalue
itadvOutputFileUriValue :: Lens' IoTAnalyticsDatasetVariable (Maybe IoTAnalyticsDatasetOutputFileUriValue)
itadvOutputFileUriValue = lens _ioTAnalyticsDatasetVariableOutputFileUriValue (\s a -> s { _ioTAnalyticsDatasetVariableOutputFileUriValue = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-dataset-variable.html#cfn-iotanalytics-dataset-variable-stringvalue
itadvStringValue :: Lens' IoTAnalyticsDatasetVariable (Maybe (Val Text))
itadvStringValue = lens _ioTAnalyticsDatasetVariableStringValue (\s a -> s { _ioTAnalyticsDatasetVariableStringValue = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iotanalytics-dataset-variable.html#cfn-iotanalytics-dataset-variable-variablename
itadvVariableName :: Lens' IoTAnalyticsDatasetVariable (Val Text)
itadvVariableName = lens _ioTAnalyticsDatasetVariableVariableName (\s a -> s { _ioTAnalyticsDatasetVariableVariableName = a })