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

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

module Stratosphere.ResourceProperties.GreengrassFunctionDefinitionEnvironment where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.GreengrassFunctionDefinitionExecution
import Stratosphere.ResourceProperties.GreengrassFunctionDefinitionResourceAccessPolicy

-- | Full data type definition for GreengrassFunctionDefinitionEnvironment.
-- See 'greengrassFunctionDefinitionEnvironment' for a more convenient
-- constructor.
data GreengrassFunctionDefinitionEnvironment =
  GreengrassFunctionDefinitionEnvironment
  { _greengrassFunctionDefinitionEnvironmentAccessSysfs :: Maybe (Val Bool)
  , _greengrassFunctionDefinitionEnvironmentExecution :: Maybe GreengrassFunctionDefinitionExecution
  , _greengrassFunctionDefinitionEnvironmentResourceAccessPolicies :: Maybe [GreengrassFunctionDefinitionResourceAccessPolicy]
  , _greengrassFunctionDefinitionEnvironmentVariables :: Maybe Object
  } deriving (Show, Eq)

instance ToJSON GreengrassFunctionDefinitionEnvironment where
  toJSON GreengrassFunctionDefinitionEnvironment{..} =
    object $
    catMaybes
    [ fmap (("AccessSysfs",) . toJSON) _greengrassFunctionDefinitionEnvironmentAccessSysfs
    , fmap (("Execution",) . toJSON) _greengrassFunctionDefinitionEnvironmentExecution
    , fmap (("ResourceAccessPolicies",) . toJSON) _greengrassFunctionDefinitionEnvironmentResourceAccessPolicies
    , fmap (("Variables",) . toJSON) _greengrassFunctionDefinitionEnvironmentVariables
    ]

-- | Constructor for 'GreengrassFunctionDefinitionEnvironment' containing
-- required fields as arguments.
greengrassFunctionDefinitionEnvironment
  :: GreengrassFunctionDefinitionEnvironment
greengrassFunctionDefinitionEnvironment  =
  GreengrassFunctionDefinitionEnvironment
  { _greengrassFunctionDefinitionEnvironmentAccessSysfs = Nothing
  , _greengrassFunctionDefinitionEnvironmentExecution = Nothing
  , _greengrassFunctionDefinitionEnvironmentResourceAccessPolicies = Nothing
  , _greengrassFunctionDefinitionEnvironmentVariables = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrass-functiondefinition-environment.html#cfn-greengrass-functiondefinition-environment-accesssysfs
gfdeAccessSysfs :: Lens' GreengrassFunctionDefinitionEnvironment (Maybe (Val Bool))
gfdeAccessSysfs = lens _greengrassFunctionDefinitionEnvironmentAccessSysfs (\s a -> s { _greengrassFunctionDefinitionEnvironmentAccessSysfs = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrass-functiondefinition-environment.html#cfn-greengrass-functiondefinition-environment-execution
gfdeExecution :: Lens' GreengrassFunctionDefinitionEnvironment (Maybe GreengrassFunctionDefinitionExecution)
gfdeExecution = lens _greengrassFunctionDefinitionEnvironmentExecution (\s a -> s { _greengrassFunctionDefinitionEnvironmentExecution = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrass-functiondefinition-environment.html#cfn-greengrass-functiondefinition-environment-resourceaccesspolicies
gfdeResourceAccessPolicies :: Lens' GreengrassFunctionDefinitionEnvironment (Maybe [GreengrassFunctionDefinitionResourceAccessPolicy])
gfdeResourceAccessPolicies = lens _greengrassFunctionDefinitionEnvironmentResourceAccessPolicies (\s a -> s { _greengrassFunctionDefinitionEnvironmentResourceAccessPolicies = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-greengrass-functiondefinition-environment.html#cfn-greengrass-functiondefinition-environment-variables
gfdeVariables :: Lens' GreengrassFunctionDefinitionEnvironment (Maybe Object)
gfdeVariables = lens _greengrassFunctionDefinitionEnvironmentVariables (\s a -> s { _greengrassFunctionDefinitionEnvironmentVariables = a })