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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrass-loggerdefinition-logger.html

module Stratosphere.ResourceProperties.GreengrassLoggerDefinitionLogger where

import Stratosphere.ResourceImports


-- | Full data type definition for GreengrassLoggerDefinitionLogger. See
-- 'greengrassLoggerDefinitionLogger' for a more convenient constructor.
data GreengrassLoggerDefinitionLogger =
  GreengrassLoggerDefinitionLogger
  { _greengrassLoggerDefinitionLoggerComponent :: Val Text
  , _greengrassLoggerDefinitionLoggerId :: Val Text
  , _greengrassLoggerDefinitionLoggerLevel :: Val Text
  , _greengrassLoggerDefinitionLoggerSpace :: Maybe (Val Integer)
  , _greengrassLoggerDefinitionLoggerType :: Val Text
  } deriving (Show, Eq)

instance ToJSON GreengrassLoggerDefinitionLogger where
  toJSON GreengrassLoggerDefinitionLogger{..} =
    object $
    catMaybes
    [ (Just . ("Component",) . toJSON) _greengrassLoggerDefinitionLoggerComponent
    , (Just . ("Id",) . toJSON) _greengrassLoggerDefinitionLoggerId
    , (Just . ("Level",) . toJSON) _greengrassLoggerDefinitionLoggerLevel
    , fmap (("Space",) . toJSON) _greengrassLoggerDefinitionLoggerSpace
    , (Just . ("Type",) . toJSON) _greengrassLoggerDefinitionLoggerType
    ]

-- | Constructor for 'GreengrassLoggerDefinitionLogger' containing required
-- fields as arguments.
greengrassLoggerDefinitionLogger
  :: Val Text -- ^ 'gldlComponent'
  -> Val Text -- ^ 'gldlId'
  -> Val Text -- ^ 'gldlLevel'
  -> Val Text -- ^ 'gldlType'
  -> GreengrassLoggerDefinitionLogger
greengrassLoggerDefinitionLogger componentarg idarg levelarg typearg =
  GreengrassLoggerDefinitionLogger
  { _greengrassLoggerDefinitionLoggerComponent = componentarg
  , _greengrassLoggerDefinitionLoggerId = idarg
  , _greengrassLoggerDefinitionLoggerLevel = levelarg
  , _greengrassLoggerDefinitionLoggerSpace = Nothing
  , _greengrassLoggerDefinitionLoggerType = typearg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrass-loggerdefinition-logger.html#cfn-greengrass-loggerdefinition-logger-component
gldlComponent :: Lens' GreengrassLoggerDefinitionLogger (Val Text)
gldlComponent = lens _greengrassLoggerDefinitionLoggerComponent (\s a -> s { _greengrassLoggerDefinitionLoggerComponent = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrass-loggerdefinition-logger.html#cfn-greengrass-loggerdefinition-logger-id
gldlId :: Lens' GreengrassLoggerDefinitionLogger (Val Text)
gldlId = lens _greengrassLoggerDefinitionLoggerId (\s a -> s { _greengrassLoggerDefinitionLoggerId = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrass-loggerdefinition-logger.html#cfn-greengrass-loggerdefinition-logger-level
gldlLevel :: Lens' GreengrassLoggerDefinitionLogger (Val Text)
gldlLevel = lens _greengrassLoggerDefinitionLoggerLevel (\s a -> s { _greengrassLoggerDefinitionLoggerLevel = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrass-loggerdefinition-logger.html#cfn-greengrass-loggerdefinition-logger-space
gldlSpace :: Lens' GreengrassLoggerDefinitionLogger (Maybe (Val Integer))
gldlSpace = lens _greengrassLoggerDefinitionLoggerSpace (\s a -> s { _greengrassLoggerDefinitionLoggerSpace = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrass-loggerdefinition-logger.html#cfn-greengrass-loggerdefinition-logger-type
gldlType :: Lens' GreengrassLoggerDefinitionLogger (Val Text)
gldlType = lens _greengrassLoggerDefinitionLoggerType (\s a -> s { _greengrassLoggerDefinitionLoggerType = a })