packages feed

stratosphere-0.11.0: library-gen/Stratosphere/ResourceProperties/GlueDatabaseDatabaseInput.hs

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

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-database-databaseinput.html

module Stratosphere.ResourceProperties.GlueDatabaseDatabaseInput where

import Control.Lens hiding ((.=))
import Data.Aeson
import Data.Maybe (catMaybes)
import Data.Monoid (mempty)
import Data.Text

import Stratosphere.Values


-- | Full data type definition for GlueDatabaseDatabaseInput. See
-- 'glueDatabaseDatabaseInput' for a more convenient constructor.
data GlueDatabaseDatabaseInput =
  GlueDatabaseDatabaseInput
  { _glueDatabaseDatabaseInputDescription :: Maybe (Val Text)
  , _glueDatabaseDatabaseInputLocationUri :: Maybe (Val Text)
  , _glueDatabaseDatabaseInputName :: Maybe (Val Text)
  , _glueDatabaseDatabaseInputParameters :: Maybe Object
  } deriving (Show, Eq)

instance ToJSON GlueDatabaseDatabaseInput where
  toJSON GlueDatabaseDatabaseInput{..} =
    object $
    catMaybes
    [ fmap (("Description",) . toJSON) _glueDatabaseDatabaseInputDescription
    , fmap (("LocationUri",) . toJSON) _glueDatabaseDatabaseInputLocationUri
    , fmap (("Name",) . toJSON) _glueDatabaseDatabaseInputName
    , fmap (("Parameters",) . toJSON) _glueDatabaseDatabaseInputParameters
    ]

instance FromJSON GlueDatabaseDatabaseInput where
  parseJSON (Object obj) =
    GlueDatabaseDatabaseInput <$>
      (obj .:? "Description") <*>
      (obj .:? "LocationUri") <*>
      (obj .:? "Name") <*>
      (obj .:? "Parameters")
  parseJSON _ = mempty

-- | Constructor for 'GlueDatabaseDatabaseInput' containing required fields as
-- arguments.
glueDatabaseDatabaseInput
  :: GlueDatabaseDatabaseInput
glueDatabaseDatabaseInput  =
  GlueDatabaseDatabaseInput
  { _glueDatabaseDatabaseInputDescription = Nothing
  , _glueDatabaseDatabaseInputLocationUri = Nothing
  , _glueDatabaseDatabaseInputName = Nothing
  , _glueDatabaseDatabaseInputParameters = Nothing
  }

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-database-databaseinput.html#cfn-glue-database-databaseinput-description
gddiDescription :: Lens' GlueDatabaseDatabaseInput (Maybe (Val Text))
gddiDescription = lens _glueDatabaseDatabaseInputDescription (\s a -> s { _glueDatabaseDatabaseInputDescription = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-database-databaseinput.html#cfn-glue-database-databaseinput-locationuri
gddiLocationUri :: Lens' GlueDatabaseDatabaseInput (Maybe (Val Text))
gddiLocationUri = lens _glueDatabaseDatabaseInputLocationUri (\s a -> s { _glueDatabaseDatabaseInputLocationUri = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-database-databaseinput.html#cfn-glue-database-databaseinput-name
gddiName :: Lens' GlueDatabaseDatabaseInput (Maybe (Val Text))
gddiName = lens _glueDatabaseDatabaseInputName (\s a -> s { _glueDatabaseDatabaseInputName = a })

-- | http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-database-databaseinput.html#cfn-glue-database-databaseinput-parameters
gddiParameters :: Lens' GlueDatabaseDatabaseInput (Maybe Object)
gddiParameters = lens _glueDatabaseDatabaseInputParameters (\s a -> s { _glueDatabaseDatabaseInputParameters = a })