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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-workflow.html

module Stratosphere.Resources.GlueWorkflow where

import Stratosphere.ResourceImports


-- | Full data type definition for GlueWorkflow. See 'glueWorkflow' for a more
-- convenient constructor.
data GlueWorkflow =
  GlueWorkflow
  { _glueWorkflowDefaultRunProperties :: Maybe Object
  , _glueWorkflowDescription :: Maybe (Val Text)
  , _glueWorkflowName :: Maybe (Val Text)
  , _glueWorkflowTags :: Maybe Object
  } deriving (Show, Eq)

instance ToResourceProperties GlueWorkflow where
  toResourceProperties GlueWorkflow{..} =
    ResourceProperties
    { resourcePropertiesType = "AWS::Glue::Workflow"
    , resourcePropertiesProperties =
        hashMapFromList $ catMaybes
        [ fmap (("DefaultRunProperties",) . toJSON) _glueWorkflowDefaultRunProperties
        , fmap (("Description",) . toJSON) _glueWorkflowDescription
        , fmap (("Name",) . toJSON) _glueWorkflowName
        , fmap (("Tags",) . toJSON) _glueWorkflowTags
        ]
    }

-- | Constructor for 'GlueWorkflow' containing required fields as arguments.
glueWorkflow
  :: GlueWorkflow
glueWorkflow  =
  GlueWorkflow
  { _glueWorkflowDefaultRunProperties = Nothing
  , _glueWorkflowDescription = Nothing
  , _glueWorkflowName = Nothing
  , _glueWorkflowTags = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-workflow.html#cfn-glue-workflow-defaultrunproperties
gwDefaultRunProperties :: Lens' GlueWorkflow (Maybe Object)
gwDefaultRunProperties = lens _glueWorkflowDefaultRunProperties (\s a -> s { _glueWorkflowDefaultRunProperties = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-workflow.html#cfn-glue-workflow-description
gwDescription :: Lens' GlueWorkflow (Maybe (Val Text))
gwDescription = lens _glueWorkflowDescription (\s a -> s { _glueWorkflowDescription = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-workflow.html#cfn-glue-workflow-name
gwName :: Lens' GlueWorkflow (Maybe (Val Text))
gwName = lens _glueWorkflowName (\s a -> s { _glueWorkflowName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-workflow.html#cfn-glue-workflow-tags
gwTags :: Lens' GlueWorkflow (Maybe Object)
gwTags = lens _glueWorkflowTags (\s a -> s { _glueWorkflowTags = a })