packages feed

stratosphere-0.15.2: library-gen/Stratosphere/Resources/GlueCrawler.hs

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

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

module Stratosphere.Resources.GlueCrawler where

import Stratosphere.ResourceImports
import Stratosphere.ResourceProperties.GlueCrawlerSchedule
import Stratosphere.ResourceProperties.GlueCrawlerSchemaChangePolicy
import Stratosphere.ResourceProperties.GlueCrawlerTargets

-- | Full data type definition for GlueCrawler. See 'glueCrawler' for a more
-- convenient constructor.
data GlueCrawler =
  GlueCrawler
  { _glueCrawlerClassifiers :: Maybe (ValList Text)
  , _glueCrawlerDatabaseName :: Val Text
  , _glueCrawlerDescription :: Maybe (Val Text)
  , _glueCrawlerName :: Maybe (Val Text)
  , _glueCrawlerRole :: Val Text
  , _glueCrawlerSchedule :: Maybe GlueCrawlerSchedule
  , _glueCrawlerSchemaChangePolicy :: Maybe GlueCrawlerSchemaChangePolicy
  , _glueCrawlerTablePrefix :: Maybe (Val Text)
  , _glueCrawlerTargets :: GlueCrawlerTargets
  } deriving (Show, Eq)

instance ToJSON GlueCrawler where
  toJSON GlueCrawler{..} =
    object $
    catMaybes
    [ fmap (("Classifiers",) . toJSON) _glueCrawlerClassifiers
    , (Just . ("DatabaseName",) . toJSON) _glueCrawlerDatabaseName
    , fmap (("Description",) . toJSON) _glueCrawlerDescription
    , fmap (("Name",) . toJSON) _glueCrawlerName
    , (Just . ("Role",) . toJSON) _glueCrawlerRole
    , fmap (("Schedule",) . toJSON) _glueCrawlerSchedule
    , fmap (("SchemaChangePolicy",) . toJSON) _glueCrawlerSchemaChangePolicy
    , fmap (("TablePrefix",) . toJSON) _glueCrawlerTablePrefix
    , (Just . ("Targets",) . toJSON) _glueCrawlerTargets
    ]

instance FromJSON GlueCrawler where
  parseJSON (Object obj) =
    GlueCrawler <$>
      (obj .:? "Classifiers") <*>
      (obj .: "DatabaseName") <*>
      (obj .:? "Description") <*>
      (obj .:? "Name") <*>
      (obj .: "Role") <*>
      (obj .:? "Schedule") <*>
      (obj .:? "SchemaChangePolicy") <*>
      (obj .:? "TablePrefix") <*>
      (obj .: "Targets")
  parseJSON _ = mempty

-- | Constructor for 'GlueCrawler' containing required fields as arguments.
glueCrawler
  :: Val Text -- ^ 'gcDatabaseName'
  -> Val Text -- ^ 'gcRole'
  -> GlueCrawlerTargets -- ^ 'gcTargets'
  -> GlueCrawler
glueCrawler databaseNamearg rolearg targetsarg =
  GlueCrawler
  { _glueCrawlerClassifiers = Nothing
  , _glueCrawlerDatabaseName = databaseNamearg
  , _glueCrawlerDescription = Nothing
  , _glueCrawlerName = Nothing
  , _glueCrawlerRole = rolearg
  , _glueCrawlerSchedule = Nothing
  , _glueCrawlerSchemaChangePolicy = Nothing
  , _glueCrawlerTablePrefix = Nothing
  , _glueCrawlerTargets = targetsarg
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-crawler.html#cfn-glue-crawler-classifiers
gcClassifiers :: Lens' GlueCrawler (Maybe (ValList Text))
gcClassifiers = lens _glueCrawlerClassifiers (\s a -> s { _glueCrawlerClassifiers = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-crawler.html#cfn-glue-crawler-databasename
gcDatabaseName :: Lens' GlueCrawler (Val Text)
gcDatabaseName = lens _glueCrawlerDatabaseName (\s a -> s { _glueCrawlerDatabaseName = a })

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

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-crawler.html#cfn-glue-crawler-role
gcRole :: Lens' GlueCrawler (Val Text)
gcRole = lens _glueCrawlerRole (\s a -> s { _glueCrawlerRole = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-crawler.html#cfn-glue-crawler-schedule
gcSchedule :: Lens' GlueCrawler (Maybe GlueCrawlerSchedule)
gcSchedule = lens _glueCrawlerSchedule (\s a -> s { _glueCrawlerSchedule = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-crawler.html#cfn-glue-crawler-schemachangepolicy
gcSchemaChangePolicy :: Lens' GlueCrawler (Maybe GlueCrawlerSchemaChangePolicy)
gcSchemaChangePolicy = lens _glueCrawlerSchemaChangePolicy (\s a -> s { _glueCrawlerSchemaChangePolicy = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-crawler.html#cfn-glue-crawler-tableprefix
gcTablePrefix :: Lens' GlueCrawler (Maybe (Val Text))
gcTablePrefix = lens _glueCrawlerTablePrefix (\s a -> s { _glueCrawlerTablePrefix = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-crawler.html#cfn-glue-crawler-targets
gcTargets :: Lens' GlueCrawler GlueCrawlerTargets
gcTargets = lens _glueCrawlerTargets (\s a -> s { _glueCrawlerTargets = a })